1

私は最近、これが可能かどうか疑問に思っていました.オブジェクトを関数に渡し、その関数内の完全に異なるオブジェクトでオブジェクト全体をオーバーライドして、その値が永久に変更されるようにします. オブジェクトは参照渡しなので、どうにかして動かないといけない気がするのですが、どうすればいいのかわかりません。コードに入れるには、次のようにする必要があります。

function a() {
    console.log("i am a");
}

function b() {
    console.log("i am b");
}

function override(func1, func2) {
    func1 = func2;
}

override(a, b);

a(); //"i am b" expected

フィドル

変数をオーバーライドしているだけなので、これは明らかに機能しませんfunc1が、アイデアは理解できると思います。また、純粋なオブジェクトの代わりに関数を使用することにしました。オブジェクトのプロパティを削除し、2 番目のオブジェクトから新しいプロパティをコピーするだけで、オブジェクトを簡単に "オーバーライド" できるからです。しかし、それは私が望むものではありません。

質問する前に、私はこれで現実の問題を解決しようとしているわけではありません。ただ好奇心から質問しているだけです。これを達成する方法はありますか? そうでない場合、そうでない理由はありますか?

ありがとう!

4

2 に答える 2

0

あなたのコードで

function override(func1, func2) {
    func1 = func2;
}

func1function を指す変数であり、 functionafunc2指す変数ですb。このステートメントfunc1 = func2func1、b を指摘しています。関数の外では何も変更されませんoverride

オブジェクトを使用して、参照渡しを利用してください。以下のコードは、それがどのように機能するかを示しています。

function a() {
    console.log("i am a");
}

function b() {
    console.log("i am b");
}

var object1 = {
   func1:a
};

var object2 = {
   func2:b
}


function override(object1, object2) {
    object1.func1 = object2.func2;
}

override(object1, object2);

object1.func1(); //"i am b"

このコードはデモンストレーション用であり、実際のシナリオでは役に立たない可能性があります。

于 2013-06-08T11:34:43.947 に答える