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