如何在不修改全局Function.prototype的情况下创建函数的继承属性?

How can I create inherited properties of functions without modifying the global Function.prototype?

本文关键字:创建 情况下 函数 继承 属性 prototype 修改 Function 全局      更新时间:2023-09-26

对于全局函数Function.prototype.

Function.prototype.aaa = 1
(function () {}).aaa // => 1

但是有没有一种方法可以在不改变Function.prototype的情况下放置函数的继承属性?

function MyFunction () { return function () {} }
MyFunction.prototype.bbb = 2
// Can I have (new MyFunction).bbb ?

您唯一的其他选择是创建您自己的Function工厂函数,因为您已经排除了修改标准Function工厂使用的机制。当然,这不太可能达到你想要的效果,因为每个人都必须使用你的工厂。: -)

修改Function.prototype不一定是邪恶的。Prototype已经这么做很多年了,而且大部分效果都不错。

function Wrap() {
    var f = new Function;
    /* for (var k in Wrap.prototype) {
        f[k] = Wrap.prototype[k];
    } 
    return f; */
    // return $.extend(f, Wrap.prototype);
    return _.extend(f, Wrap.prototype);
}
Wrap.prototype.foo = 42;
(Wrap()).foo === 42; // true

创建一个新函数,然后用Wrap.prototype中的属性扩展该函数。

使用jQuery、下划线或简单的for循环。