代码如下:
javascript
function Foo() {}; Foo.prototype.talk = function () { alert('hello~\n'); }; var a = new Foo; a.talk(); // 输出'hello~\n'
但是如果这样:
javascript
Foo.talk() // 报错:Object doesn't support property or method 'talk' Foo.prototype.talk() // 没有问题
而且当我使用
javascript
"talk" in FOO //返回false
但是如果查看
javascript
Foo.prototype
会发现talk属性的确已经被添加上去了。
非常不理解这种行为。
因为这里a是构造出来的对象,其[[proto]]属性指向Foo.prototype。但Foo不是,Foo是一个函数对象,它的[[proto]]指向的是Function.prototype,因此有的是Foo.call Foo.apply这些函数对象上的方法(来自Function.prototypr)而不会有你定义的那个talk
粗(错)暴(误)地说,一个是对象,另一个是类,类上的动态方法只能用对象才能调到,直接对着类调到的只能是静态方法