我正在读这本书 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的帮助和一点搜索得到了这个结论,所以它可能不够准确。欢迎任何更正或完成。
答案 0 :(得分:3)
我相信原型链是:Object
&gt; Function
&gt; Number
:
Number instanceof Function; // true
Number instanceof Object; // true
Function instanceof Object; // true