JavaScript中自定义函数的默认原型是什么?

nan*_*din 8 javascript prototype

function f()
{
}

alert (f.prototype); // returns something like [object Object]
Run Code Online (Sandbox Code Playgroud)

我的理解是默认情况下自定义函数的原型应该为null或未定义,有人可以解释一下吗?谢谢!

另请参见:__ proto__与constructor.prototype有何不同?

CMS*_*CMS 7

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
Run Code Online (Sandbox Code Playgroud)


kem*_*002 5

这是描述对象继承的链接:

http://javascript.crockford.com/prototypal.html

http://www.mollypages.org/misc/js.mp 替代文字
(来源:mollypages.org

  • @丁:是的。这样,当您使用函数作为构造函数(`new f()`)创建对象时,您创建的对象的原型链中将包含Object(因为其原型的原型* is * Object)。注意将对象的原型(“继承自”对象的对象)与函数的“ prototype”属性相混淆-它们不是一回事。如果您有兴趣,请参阅CMS的答案以获取详细信息... (2认同)