将原型添加到所有Function
s 是微不足道的:
Function.prototype.foo = function () { return 'bar'; };
(new Function).foo(); // 'bar'
然而,将事物分配给全局对象的原型也是不好的做法,因为跨模块对象依赖问题,部分导致早期版本的prototype.js消亡。
假设我希望我的所有函数都有方法foo
。我会做类似的事情:
(function () {
var Fn = Function;
Fn.prototype.foo = function () { return 'bar'; };
(new Fn).foo(); // 'bar'
}());
(new Function).foo() // also 'bar'. this is bad!
不幸的是,这Function
也会影响 ' 的原型,因为 Function 是通过引用限定范围的。
将原始值传递给 IIFE 的通常“复制值”方法也会失败,因为Function
它本身就是一个对象。
(function (Fn) {
Fn.prototype.foo = function () { return 'bar'; };
(new Fn).foo(); // 'bar'
}(Function));
Function.foo // function () { return 'bar'; }
鉴于这些示例,是否不可能扩展选定函数的原型而不影响我范围之外的所有其他函数?