【发布时间】:2013-10-27 19:48:26
【问题描述】:
将原型添加到所有Functions 是微不足道的:
Function.prototype.foo = function () { return 'bar'; };
(new Function).foo(); // 'bar'
但是,将事物分配给全局对象的原型也是不好的做法,因为跨模块对象依赖问题,部分导致早期版本的 prototype.js 消亡。 p>
假设我希望所有 my 函数都具有 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'; }
鉴于这些示例,是否真的不可能扩展 选定 函数的原型,而不影响我范围之外的所有其他函数?
【问题讨论】:
-
@ArtyomNeustroev “你的 [sic] 试图从 Function 继承。这是一个正确的痛苦。”嗯……真可惜。
标签: javascript