2016-05-11 21 views
-2

thisのコンテキストをapplyなどで変更することができます。「これ」を変更できないのはなぜですか?

これはどうしてできないのですか?

this = 5; // invalid left-hand side in assignment

それは、この大差はありません。

function Foo() { 
    console.log(this.valueOf()); 
} 

Foo.apply(5); 

applythis = 5を使用しての違いは何ですか?どのような関数が呼び出されても、thisが何であるかをローカルで再定義しないでください。

+0

まず、別の変数を定義し、それを' this'に初期化してから心臓のコンテンツに変更するだけでいいです。第二に、プログラムが何をしているのかを理解することはかなり不可能になります。 –

+0

Googleの「このjavascriptを変更する」 –

答えて

1
+0

しかし、どのような関数が呼び出されても 'this'をローカルで再定義するだけではなく、' apply'をどのように使っていますか? – anonymous

+0

'apply'は' this'という新しいコンテキストを与えますが、それを再定義しません。 – ryanpcmcquen

+2

@anonymous関数**は呼び出されるまで** 'this'を持ちません。したがって、 'apply'などで' this'を指定することは、それを再定義するのではなく、それを指定することであり、関数内では、呼び出しの時点でやっていることを意味する "ローカル"ではありません。 –

1

予約語ではなく、通常の変数です。

0

これはオブジェクトです。このオブジェクトの子に数値を割り当てることはできますが、数値自体に数値を代入することはできません。あなたは、VBや、この中で私を変更傾けると同じ存在理由で

+0

オブジェクトの子は何ですか? this.helloのような –

+0

。こんにちは、これの子です。 –

+0

これは子供ではなく財産です。 –

1

これはあなたがしている状況。あなたは、単に別のコンテキストにする必要がコンテキストを変更するので、あなたはそれを変更傾けるです...

c#。

「this」は割り当て可能な変数ではありません。それは読み取り専用です。あなたは私はあなたに何かを提案することができ、これを変更する必要があり、実際のコードで多分

...

あなたはこのような何か行うことができます:あなたはそれを変更する必要がある場合

var myFunction = function(arg1) { 
    //Do something here ... 
}; 

これを`

myFunction = function(arg1) { 
    //Do something else here ... 
}; 
+0

"*これはあなたがいるコンテキストです*"絶対にありません。 [*実行コンテキスト*](http://www.ecma-international.org/ecma-262/6.0/#sec-execution-contexts)には** this *パラメータがあり、**任意の**非厳密モードのオブジェクト、または厳密なモードの**任意の**値実行コンテキストをまったく参照することはできず、すべての呼び出しで* this *の値を別の値に設定することができます([*§8.3.3ResolveThisBinding()*](http://www.ecma -international.org/ecma-262/6.0/#sec-resolvethisbinding))。 – RobG

関連する問題