为什么String类会从Function.prototype扩充?

时间:2013-12-18 03:21:53

标签: javascript

我正在阅读这本书JavaScript the good parts并看到以下代码:

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

String.method('trim', function ( ) {
 return this.replace(/^\s+|\s+$/g, '');
});
document.writeln('"' + " neat ".trim( ) + '"');

令我困惑的是,在Function.prototype.method定义中,它只是增加了Function类的prototype属性,而与Object.prototype无关。那么为什么在这种情况下String对象仍然会有method方法呢?

2 个答案:

答案 0 :(得分:0)

因为构造函数是函数,所以String是具有prototype的函数。 Function.prototype.method允许您向原型添加任何函数的方法,在本例中为String

答案 1 :(得分:0)

要回答这个问题,我们先来看看String是什么:

> typeof String
"function"

这是一个函数,所以在Function.prototype上定义的任何东西都是“继承的”;让我们来看看method()做了什么:

this.prototype[name] = func;

此处,this.prototype引用String.prototype,因此,此代码确实如此:

String.prototype.trim = function() { ... }