编辑:对于那些未来看到这篇文章的人来说,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