javascript中Number和Function.prototype之间的关系是什么?

时间:2013-03-27 10:37:09

标签: javascript function-prototypes prototype-chain

我正在读这本书 Javascript:Good Parts 。当我阅读下面的代码时,我有点困惑:

Function.prototype.method = function (name, func) {
    this.prototype[name] = func;
    return this;
};

Number.method('integer',function(){
    return Math[this < 0 ? 'ceil' : 'floor'](this);
});

我认为上面代码的第一部分意味着JavaScript中的任何函数现在都有一个名为 method 的方法。但“数字”也是一个功能吗?为什么Number.method有意义?

我认为Number继承了继承Object.prototype(Number-&gt; Number.prototype-&gt; Object.prototype)的Number.prototype,因为Number在开头没有“方法”方法,它会查找它原型链。但是Function.prototype不在链上,对吗?

Number,Number.prototype和Function.prototype之间的关系是什么?


更新I:

我已经搜索了一些额外的信息,现在更加困惑了。有人说Number实际上是一个函数,这似乎是有道理的,因为Number instanceof Function的值是true。但(-10 / 3) instanceof Number的值是false。这不是很混乱吗?如果数学中的数字(例如3,2.5,( - 10/3))在JavaScript中不是Number,那么(-10 / 3)如何从integer()调用Number {1}}? (以下这行来自同一本书)

 document.writeln((-10 / 3).integer());

更新II:

问题基本解决了。

感谢@ Xophmeister的帮助,现在我的结论是Number可以调用method,因为Number是一个构造函数,因此它与Function.prototype相关联。至于为什么在JavaScript中类型为基本类型的数字(3,2.5,( - 10/3))可以调用对象Number具有的方法,应该引用this page

我基本上从@ Xophmeister的帮助和一点搜索得到了这个结论,所以它可能不够准确。欢迎任何更正或完成。

1 个答案:

答案 0 :(得分:3)

我相信原型链是:Object&gt; Function&gt; Number

Number instanceof Function; // true
Number instanceof Object;   // true
Function instanceof Object; // true