1

オブジェクト変数を常に参照することなく、オブジェクトのプロパティとメソッドを追加/変更できるようにしたいと考えています。例えば:

var myObj = new MyClass();

myObj.function() {
    this.str = 'String';
    this.fn =  function() {
        // Function here...
    }
}

とは対照的に:

var myObj = new MyClass();

myObj.str = 'String';
myObj.fn = function() {
    // Function here...
}

この方法では無名関数を呼び出すことができないため、最初の例が機能しないことは承知しています。ただし、コードのブロックをオブジェクト変数スコープに記述できるように、このようなことを実行できる方法はありますか。変数名の代わりに「this」を使用できるようにしたい。

オブジェクトの単一のインスタンスに対してのみこれを行いたいことに注意してください...クラスを変更したり、新しいクラスを作成したりする必要はありません。

4

2 に答える 2

3

次のようなことができます。

(function () {
    this.str = 'String';
    this.fn = function () { /* ... */ };
}).call(myObj);

または、さらに簡単に:

(function (x) {
    x.str = 'String';
    x.fn = function () { /* ... */ };
})(myObj);

しかし、なぜこれをやりたいのかを尋ねなければなりません。myObjとてつもなく長い名前ですか?

于 2012-12-27T00:16:07.780 に答える
3
function decorateInstance() {
    this.foo = "42";

    this.go = function() {
        return this.foo;
    }
}

var o = {};
decorateInstance.call(o);
console.log(o.foo);
console.log(o.go());​
于 2012-12-27T00:16:53.880 に答える