我正在阅读这本书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
方法呢?
答案 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() { ... }