Function.prototype是唯一没有prototype属性的函数吗?

时间:2016-07-16 12:49:40

标签: javascript

Function.prototype是唯一没有prototype属性的函数吗?

为什么属性不存在而不是prototype属性值为null

document.write(Object.getOwnPropertyNames(Function.prototype));

编辑:大概是prototype属性被删除,因为它没有[[Construct]]内部方法(它不是构造函数)。

2 个答案:

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