function f()
{
}
alert (f.prototype); // returns something like [object Object]
我的理解是默认情况下自定义函数的原型应该为null或undefined,有人可以解释一下吗?谢谢!
答案 0 :(得分:6)
自动创建函数对象的prototype
属性,它只是一个具有{DontEnum}
和{DontDelete}
属性属性的空对象,您可以在规范中看到如何创建函数对象:
注意步骤9,10和11:
9)创建一个由表达式new Object()
构建的新对象。
10)将Result(9)的构造函数属性设置为F.此属性的属性为{ DontEnum }
。
11)将F的prototype属性设置为Result(9)。此属性具有15.3.5.2中指定的属性。
你可以通过以下方式看到这是真的:
function f(){
//...
}
f.hasOwnProperty('prototype'); // true, property exist on f
f.propertyIsEnumerable('prototype'); // false, because the { DontEnum } attribute
delete f.prototype; // false, because the { DontDelete } attribute
答案 1 :(得分:3)
这是一个描述对象继承的链接:
http://javascript.crockford.com/prototypal.html
http://www.mollypages.org/misc/js.mp alt text http://www.mollypages.org/misc/jsobj.jpg
答案 2 :(得分:0)
它并非未定义,因为您只是定义了它。仅仅因为你的function f()
对象仍然为空并不意味着它没有被定义。它被定义为没有内容。