第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求助,關于javascript中的__proto__問題 ,具體如下~

求助,關于javascript中的__proto__問題 ,具體如下~

牛魔王的故事 2022-01-01 11:07:20
function Boo() {}function Foo() {}Foo.prototype = new Boo;p=new Foo;console.log(p.__proto__); //這里為什么輸出的是Boo{}呢?不是應該輸出Foo{}嗎,另外p.__proto__.p.__proto__輸出的也是Foo{}另外function Foo() {}p=new Foo;console.log(p.__proto__);這里輸出的是Foo{}
查看完整描述

2 回答

?
慕仙森

TA貢獻1827條經(jīng)驗 獲得超8個贊

prototype 是原型,是Function對象才有的屬性,原型主要是用來實現(xiàn)繼承,從而用js 進行面向對象編程
如 Foo 是一個Function對象,是有prototype屬性的 ,它指向一個Boo 的實例對象
而p 是一個 Foo 的實例對象,不是一個Function 對象,沒有prototype 屬性,但是p有一個私有屬性__proto__ 這個屬性,一般不直接訪問的,事實上這個屬性就是 Foo.prototype
在chrome控制臺中測試
console.log(p.__proto__ == Foo.prototype)
VM952:2 true
console.log(p.__proto__ === Foo.prototype)
VM956:2 true
上述測試都輸出true,說明他們確實是同一個東西

js的繼承是通過原型繼承的,有個原型鏈的概念,而原型鏈就是通過__proto__屬性實現(xiàn)的
function Boo() {this.x="test in Boo";}
function Foo() {this.y = "test in Foo"}
Foo.prototype = new Boo;
p=new Foo;
console.log(p.y);//test in Foo

console.log(p.x);//test in Boo
Foo 中并沒有屬性x,當p找不到屬性x時,就到p.__proto__屬性(指向原型)中找,原型中是有x屬性的,于是輸出x的值
如果不考慮內部實現(xiàn),就好像屬性x是從Boo中繼承的一樣
console.log(p.__proto__); 輸出 Boo{}表示一個空的Boo對象(通過 new Boo 創(chuàng)建的 )

p.__proto__.p.__proto__這個會報錯,因為p.__proto__中沒有名為p的屬性

function Foo() {}
p=new Foo;
console.log(p.__proto__);
因為沒有改變Foo.prototype 的屬性,所以仍然指向它自己(Foo)
而 p.__proto__ 就是 Foo.prototype 所有輸出Foo{} 表示一個空的Foo對象



查看完整回答
反對 回復 2022-01-04
?
瀟瀟雨雨

TA貢獻1833條經(jīng)驗 獲得超4個贊

p.__proto__這個是原型的意思

1.
function Boo() {}
function Foo() {}
Foo.prototype = new Boo; //這里你修改了Foo的原型為Boo,所以下面打印出的是Boo
p=new Foo;
console.log(p.__proto__); //這里為什么輸出的是Boo{}呢?不是應該輸出Foo{}嗎,另外p.__proto__.p.__proto__輸出的也是Foo{}

2.
function Foo() {}
p=new Foo;
console.log(p.__proto__);
這里輸出的是Foo{}
p是Foo的對象,又沒有修改過原型,當然是Foo了

查看完整回答
反對 回復 2022-01-04
  • 2 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號