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

时间:2010-02-26 20:10:13

标签: javascript prototype

function f()
{
}

alert (f.prototype); // returns something like [object Object]

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

另见:How does __proto__ differ from constructor.prototype?

3 个答案:

答案 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)

答案 2 :(得分:0)

它并非未定义,因为您只是定义了它。仅仅因为你的function f()对象仍然为空并不意味着它没有被定义。它被定义为没有内容。