關(guān)于實(shí)例,原型和對(duì)象
開始以為自己明白了關(guān)于實(shí)例和原型的問題,今天聽老師說了感覺還差的好遠(yuǎn);
兩個(gè)對(duì)象,A和B
1:A=new B
2:A.prototype=new B
3:A.prototype=B.prototype
1:第一個(gè)老師在視頻中A是一個(gè)變量obj,是不是表示obj是B的實(shí)例,obj作為B的實(shí)例和B都有一個(gè)指針指向了B的原型?
如果這里的obj是一個(gè)對(duì)象A是不是意味著這個(gè)對(duì)象A有一個(gè)指針指向了B的原型,同時(shí)作為對(duì)象,他還有一個(gè)默認(rèn)的指針指向了他本身的原型object.prototype?一個(gè)對(duì)象可以有兩個(gè)原型鏈的繼承嘛;求指點(diǎn)
2:A作為一個(gè)對(duì)象。第一種想法是他有一個(gè)自帶的prototype,如果這是我給他的prototype指向了new B;是不是說給他的默認(rèn)的原 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?型指向了B的原型;
????????????????????????????? ? 第二種想法是他的自帶的原型指向了A,然后通過A再向上到A的原型;
3:A.prototype=B.prototype:此時(shí)也是A和B的指針同時(shí)指向了B的原型,似乎和第2個(gè)的第一種想法類似;
3和2中的第一個(gè)似乎有相同之處;他們之間的差別是不是2中的A有自己的原型.然后通過他的原型到B的原型;而三中的A直接將B的原型作為自己的原型了,也就是說此時(shí)我如果改變A的原型也就意味著將B的原型改變了,畢竟他們本是就是一個(gè)東西嘛。
我知道自己想的說的一塌糊涂了,不過還是希望能將自己的想法說出來,希望能有大神分析一下給指出哪里不對(duì),以及上面幾種繼承的不同之處,拜謝
2016-04-08
我不是大神,在這里說一下自己的想法,自己理解的這個(gè),我也不知道是不是正確,你可以看看:
對(duì)于1.A=new B,就像ppt中的obj= new foo()一樣,a是一個(gè)變量obj,表示obj是B的實(shí)例,obj的[[proto]]是指向B的說明obj的原型就是B,也就是a的object.prototype就是B,而B再往上指向B自己的原型,此處沒有矛盾,而obj變量也就是a對(duì)象只有一個(gè)原型鏈。。。下面2和3也可以按照這種思路理解
2016-04-08
樓主說的我也沒完全看明白,不過基于那三個(gè)表達(dá)式,我是這樣理解的
1:這時(shí)候A其實(shí)是用構(gòu)造器方法New B()實(shí)例化的一個(gè)對(duì)象,當(dāng)然A的原型其實(shí)就是B.prototype,因?yàn)閲?yán)格來說A就是B的一種存在方式,但是此時(shí)A不能再作為構(gòu)造器實(shí)例化其他函數(shù),正因?yàn)樗荁的實(shí)例化,即不不能使用var c=new A();這也是它跟下面第二個(gè)表達(dá)式的本質(zhì)區(qū)別
2:A.prototype=new B(); new B()其實(shí)就是創(chuàng)建了一個(gè)空對(duì)象,并且繼承了B的原型,但是不會(huì)影響B(tài)自己的引用,即修改A是不會(huì)污染B的,可以說實(shí)現(xiàn)了繼承,此時(shí)可以用A構(gòu)造器方法實(shí)例化新的對(duì)象。例如視頻例子用boson=new student(...);這是一種可行的繼承。
3.這種就是將A.prototype直接指向了B.prototype,即他們的原型就同一引用,而不是像第二個(gè)方法,創(chuàng)建了一個(gè)B的空對(duì)象給A提供引用。這樣會(huì)導(dǎo)致修改A,B也會(huì)跟著變化,就是我說的互相污染,顯然不是繼承應(yīng)該有的現(xiàn)象。
我也是剛看JS沒多久,可能說的有好多不對(duì)的地方,希望能起一點(diǎn)作用。