理解JavaScript中的函数对象

时间:2013-09-20 11:35:49

标签: javascript

我是JavaScript的新手,我正在关注Douglas Crockford的书, The Good Parts

它说:

每个函数对象也使用prototype属性创建。它的值是一个具有constructor属性的对象,其值为函数。这与Function.prototype的隐藏链接不同。

我知道函数对象链接到Function.prototype,但上面的行是什么意思?

有人可以为我简化吗?

1 个答案:

答案 0 :(得分:9)

  

每个函数对象也使用prototype属性创建。

var fn = function() { };
fn.hasOwnProperty("prototype"); // true

也就是说,对于JavaScript中的每个函数,每个函数都有一个prototype属性,就像任何其他JavaScript对象一样。


  

它的值是一个带有构造函数属性的对象,其值是函数。

prototype指向的对象具有指向原始函数的constructor属性。

fn.prototype.constructor === fn // true;

也就是说,您可以通过查看obj.prototype.constructor从构造对象派生构造函数(除非它已被覆盖)。


  

这与Function.prototype

的隐藏链接不同

您创建的prototype对象的功能与Function's原型不同。

fn.prototype != Function.prototype // true

也就是说,如果你扩充Function.prototype,那么方法将在函数引用上可用。如果你扩充你的函数prototype,那么这些方法将在使用该构造函数的构造对象上可用。