1. ホーム
  2. javascript

[解決済み] JavaScript: 関数をクローンする

2022-06-02 06:20:54

質問

JavaScriptで関数をクローンする一番早い方法は何でしょうか(プロパティ付きでもなしでも)?

思い浮かぶ2つのオプションは eval(func.toString())function() { return func.apply(..) } . しかし、私はevalのパフォーマンスを心配し、ラップはスタックを悪化させ、おそらくたくさん適用したり、すでにラップに適用した場合、パフォーマンスを低下させます。

new Function(args, body) はいい感じですが、JSでJSパーサーを使わずに既存の関数をargsとbodyに分割するのは具体的にどのように信頼できるのでしょうか?

事前にありがとうございます。

更新しました。 私が言いたいのは、以下のようなことができることです。

var funcB = funcA.clone(); // where clone() is my extension
funcB.newField = {...};    // without affecting funcA

どのように解決するのですか?

これを試してみてください。

var x = function() {
    return 1;
};

var t = function(a,b,c) {
    return a+b+c;
};


Function.prototype.clone = function() {
    var that = this;
    var temp = function temporary() { return that.apply(this, arguments); };
    for(var key in this) {
        if (this.hasOwnProperty(key)) {
            temp[key] = this[key];
        }
    }
    return temp;
};

alert(x === x.clone());
alert(x() === x.clone()());

alert(t === t.clone());
alert(t(1,1,1) === t.clone()(1,1,1));
alert(t.clone()(1,1,1));