Function.prototype
是唯一没有prototype
属性的函数吗?
为什么属性不存在而不是prototype
属性值为null
。
document.write(Object.getOwnPropertyNames(Function.prototype));
编辑:大概是prototype
属性被删除,因为它没有[[Construct]]
内部方法(它不是构造函数)。
答案 0 :(得分:2)
啊,刚发现section 9.3第6段说:
非构造函数的内置函数没有prototype属性,除非在特定函数的描述中另有说明。
所有“普通”函数都有[[Construct]]
内部方法(section 9.2.3):
如果functionKind是“normal”,请让needsConstruct为true。
异乎寻常的内置函数可能有也可能没有[[Construct]]
内部方法,如果没有,则它们没有prototype
属性,“除非另有说明”。
答案 1 :(得分:1)
只有构造函数具有prototype
property:
可用作构造函数的函数实例具有
prototype
属性。
除了Function.prototype
之外,还有许多非构造函数的例子,例如
Math
对象中的方法:
typeof Math.pow; // "function"
'prototype' in Math.pow; // false
一些主机对象:
typeof document.createElement('object'); // "function"
'prototype' in document.createElement('object'); // false
在ES6中,箭头功能:
typeof (x => x * x); // "function"
'prototype' in (x => x * x); // false