在JavaScript中扩充类型

Bob*_*ian 22 javascript

我正在阅读Douglas Crockford的JavaScript:The Good Parts,我对某些事情感到有些困惑.在第4章的"扩充类型"下,他创建了一个添加方法的快捷方式.

Function.prototype.method = function (name, func) {
    this.prototype[name] = func;
    return this;
};
Run Code Online (Sandbox Code Playgroud)

他说:

通过使用'method'方法扩充Function.prototype,我们不再需要键入prototype属性的名称.现在可以隐藏一点丑陋.

然后他继续使用它来为数字原型添加一个"整数"方法.

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

document.writeln((-10 / 3).integer()); // -3
Run Code Online (Sandbox Code Playgroud)

我在这里有点困惑...因为我们在Function原型中添加了'method'方法,而不是Number原型.据我所知,Number对象不会从Function原型继承(虽然我可能在那里错了).我看到这有效,但我不明白为什么Number对象能够使用这个'方法'方法来添加...方法.

aro*_*oth 11

我认为这是有效的,因为它Number 一个功能.

如下所示:http: //jsfiddle.net/zCbdB/1


Clu*_*ess 5

Number实际上是一个功能.任何构造函数都是函数.

在javascript中考虑类型的一种方法是说类型只是一个Foo具有.prototype属性的函数.这是使用new关键字创建的任何对象的原型,如new Foo().按惯例Foo,大写表示它是构造函数.