编辑:对于那些以后看到这篇文章的人来说,这个网站对于我消化 Javascript 无疑是至关重要的。如果您来自传统的 OOP 背景,我强烈推荐它。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++ 可能是一个巨大的怪物,但至少我确切地知道发生了什么。在这里......我正在使用我最好的猜测......我想只是一个新的范例。无论如何,谢谢你能帮忙......我在这个.prototype上颠倒了。