これの使用について少し

皆さん、こんにちは!

javascriptには、他のプログラミング言語ではほとんど見られない興味深いニュアンスがたくさんあります。 私の意見では、これらの最も必要なものを考慮してください-これ。
この投稿は、このトピックに関する知識を更新するのに役立ちます。
理論については長い間説明しません。コードに直行し、その実装の結果として何が起こるかを考えた方が良いでしょう。

これは異なるコンテキストで
var firstObject = { value: 0, increment: function () { this.value++ ; console.log(this.value); } }; firstObject.increment(); 


コンソールには何が表示されますか?
これは、インクリメント関数がfirstObjectのメソッドであるため、このコンテキストでは、これがfirstObjectを指しているためです。

 var secondObject = { value: 0 }; secondObject.increment = function () { var incrementInternal = function () { this.value++ ; console.log(this.value); } incrementInternal(); } secondObject.increment(); 


この場合、悲しいかな、奇跡は起こらず、その価値はもう一つになります。
IncrementInternalは、incrementメソッドのコンテキストで呼び出される関数であり、javascriptでは、これをsecondObjectにバインドするための十分な条件ではありません。

ヒント:この動作は多くの場合、同様の方法で回避され、これへのリンクが保持されます。
 var secondObject = { value: 0 }; secondObject.increment = function () { var self = this; var incrementInternal = function () { self.value++ ; console.log(self.value); } incrementInternal(); } secondObject.increment(); 


次の例は非常に単純です
 var thirdObject = function (value) { this.value = value; this.increment = function () { this.value++ ; console.log(this.value); } } var thObj = new thirdObject(0); thObj.increment(); 


もちろん、newオペレーターが呼び出されると、現在のオブジェクトを指すため、コンソールには再び1つがあります。
Javascriptの専門家は、1つの小さな変更を加えることでコードを改善する方法に間違いなく気付いています。
 var thirdObject = function (value) { this.value = value; } thirdObject.prototype.increment = function () { this.value++ ; console.log(this.value); } var thObj = new thirdObject(0); thObj.increment(); 

したがって、thirdObjectオブジェクトの多くのインスタンスを作成する必要がある場合、新しいthirdObjectごとにincrementメソッドが作成されず、プロトタイプレベルで使用できるため、パフォーマンスを大幅に改善できます。

callとapplyを使用してこの値を変更できることを覚えておくことが重要です。そのため、これを使用すると特定の危険があります。 不快な状況を避けるために、javascript機能を賢く使用してください。

Source: https://habr.com/ru/post/J178265/


All Articles