在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js的原型及原型鏈問題

js的原型及原型鏈問題

幫我分析下,這個(gè)具體是如何的,誰是誰的誰啊,一頭霧水,想畫個(gè)草圖出來,都不知道畫的對(duì)應(yīng)誰了

    function A(){};
    function B(){
        return new A();
    }
    A.prototype = B();
    B.prototype = new B();

最好畫圖,分析出A,A的原型,A的實(shí)例以及相應(yīng)B的,謝謝,我已經(jīng)被繞暈了,弄不清楚了

回答
編輯回答
尐懶貓

圖片描述圖片描述

確實(shí)跟B沒有任何關(guān)系 上面圖有問題

2017年3月22日 00:56
編輯回答
生性

function B的結(jié)果返回一個(gè)A的實(shí)例

A.prototype = B();

做一下等價(jià)替換

A.prototype = new A();

如果一個(gè)構(gòu)造函數(shù)返回一個(gè)對(duì)象,則它的實(shí)例的原型為這個(gè)對(duì)象
所以 B生成的實(shí)例的原型也是A

2017年5月13日 08:19
編輯回答
帥到炸

不是很理解這段代碼的用途和意義,所以只能大概分析下,可能對(duì)也可能錯(cuò)。

首先簡(jiǎn)化下:

function A(){
};
// A.prototype = B();
// 得到一個(gè) A 的實(shí)例
const instanceA = B();
A.prototype = instanceA;
function B(){
    return new A();
}
// B.prototype = new B();
// 得到一個(gè) B 實(shí)例,實(shí)際這個(gè)實(shí)例是 A 的實(shí)例
const instanceB = new B();
B.prototype = instanceB;

function A

在沒有對(duì)A.prototype賦值前,是這樣的:

圖片描述

如果獲取A的實(shí)例上的屬性時(shí)沒有找到,就會(huì)到原型上找,就是右邊的那個(gè){ constructor: Function A },所以instanceA.toString最終是在Object上找到的。

到這里都能理解對(duì)吧,OK,然后,將A.prototype指向一個(gè)新對(duì)象,變成了這樣:

圖片描述

如果給instanceA添加任意屬性:

function A(){
};
// A.prototype = B();
// 得到一個(gè) A 的實(shí)例
const instanceA = B();
instanceA.sayHello = function () {
    console.log('hello A');
}
A.prototype = instanceA;

然后再實(shí)例化A得到的新實(shí)例,都有sayHello方法,因?yàn)闀?huì)到instanceA上尋找,這里可以自己動(dòng)手試試。

const test = new A();
test.sayHello(); // hello A

function B

再來分析B構(gòu)造函數(shù)。
圖片描述

對(duì),就是這樣,和function B沒有任何關(guān)系。

2017年4月15日 20:31