0

thisJavascriptでの値を設定するにはどうすればよいですか?
例えば:

var obj = {
    a: 'b',
    c: "d",
    e: function() {
        this = {
            one: 1,
            two: 2
        };
    }
};

これも可能ですか?

4

4 に答える 4

1

thisあなたが求めているように、JavaScript での値を明示的に割り当てることはできません。

関数の実行が開始されると、thisその正確な関数内の値は変更されません(ただし、埋め込み関数は独自の値を持つことができますthis)。

このようなプロパティを割り当てることができるthisので、おそらくそれが必要です。

this.one = 1;
this.two = 2;

代わりにthis、関数の呼び出し元によって制御され、関数がどのように呼び出されるかによってthis、関数内に何が設定されるかが決まります。例えば:

obj.e()

thisの内部の値をに設定しe()ますobj


とを使用.apply().call()て、の値をthis包含オブジェクト以外のものに設定することもできます。

たとえば、あなたが求めたことを実行するには、次のコードを使用します。

var test = {one:1, two:2};
var obj = { a:'b', c:"d", e:function(){
    // this will be set to the test object in here when called as below
}};

obj.e.call(test);

thisこの特定の呼び出しの内部の値がe()、要求されたオブジェクトに設定されます。

于 2013-02-16T19:28:50.750 に答える
0
var obj = { a:'b', c:"d", e:function(){
  // Here, this.one === 1 and this.two === 2
}.bind({ one: 1, two : 2})};
于 2013-02-16T19:29:04.113 に答える
0

「this」は、関数本体内に設定できない予約済みのキーワードです。

apply関数のまたはcallメソッドを使用して、この特定の値で関数を呼び出すことができます。obj.e.call({one: 1, two: 2})。これらの2つの関数メソッドに関するMDNの記事を調べてください。

ECMAScript 5のメソッドを使用して、関数が呼び出されるたびbindにの値を永続的に設定することもできます。thisこれはECMAScript5メソッドであるため、古いブラウザーでは機能しませんが、古いブラウザーにサポートを追加するために使用できるポリフィルがあります。

于 2013-02-16T19:33:27.187 に答える
0

これはどう?

this.one=1;
this.two=2;
于 2013-02-16T19:34:01.443 に答える