編輯:對於那些未來看到這篇文章的人來說,this site對我來說無疑是消化Javascript的關鍵。如果你來自傳統的面向對象的背景,我強烈推薦它。 UML-esq圖很棒。學習。原型
我仍然無法弄清楚Javascript中的.prototype屬性。它僅僅是對另一個對象的引用嗎?或者它是對另一個對象的指針的引用?我來自C/C++/x86,卻無法看到它是如何工作的。我們來看看我目前看到的東西的一些例子;它會幫助指出我的錯誤,看看事情是如何工作的。我甚至不知道其中的一些是否是有效的語法。 Object
和Function
分別是全局對象/函數對象。
1 // Global.prototype = ??
2 // Function.prototype = ??
3
4 var obj1 = {}; // obj1.prototype = Object
5 obj2 = {}; // obj2.prototype = Object
6
7 var func1 = function() {}; // func1.prototype = Function
8 func2 = function() {}; // func2.prototype = Function
9 function func3() {} // func3.prototype = Function
10
我很困惑。
11 var Foo = function() { this.prop1 = 0; }
12 var foo = new Foo(); // should it be 'new Foo' or 'new Foo()'?
13 // Foo.prototype = Function
14 // foo.prototype = Foo
15 var Goo = function() { this.prop2 = 0; }
16 var goo = new Goo();
17 // goo.prototype = Goo
18 goo.prototype = new Foo();
19 // goo.prop1 now exists ?
我也不明白交換原型。
20 function A() {
21 this.prop1 = 1;
22 }
23 function B() {
24 this.prop2 = 2;
25 }
26 function C() {
27 this.prop3 = 3;
28 }
29 C.prototype = new B();
30 var c = new C();
31 // c.prop1 = 1
32 // c.prop2 = 2
33 // c.prop3 = undefined
34 C.prototype = new A();
35 // c.prop2 = 2???
36 // c.prop3 = 3
我無法理解這個概念。我不太明白。我不明白克隆對象如何獲得自己的本地數據副本,但對原始對象(原型)的更改以某種方式級聯到克隆。我一直在試圖FigureBug出來的東西擺弄周圍,但精神上我不能想出一個想法,是與每一個例子我見過
C++可能是一個巨大的怪物一致的,但至少我知道確切發生了什麼事。這裏...我用我最好的猜測.. 只是一個新的範式,我想。無論如何,如果你能幫忙,謝謝......我在這個原型上倒過來了。
檢查我的回答這樣一個問題:http://stackoverflow.com/questions/17047025/trying-to-understand-javascript-inheritence/17049716#17049716 – Hoffmann
如果你問obj.x和OBJ沒有它的自己的x屬性,JS會檢查obj.prototype.x的存在,如果存在,返回它,否則返回undefined。把它看作是編程的呼叫轉移,原型是可以嘗試訪問數據的備用數字。由於它是不同的電話,如果替代品被毀壞,您仍然可以撥打主線。 – dandavis
@dandavis好的,我明白了。我不明白什麼.prototype引用,它默認設置爲什麼,以及當我開始交換原型的時候會發生什麼? – gone