-1

私は現在JavaScriptを学んでおり、オブジェクト、特に「this」キーワードを理解するのに苦労しています。私は W3schools のチュートリアルを読み、YouTube を検索しました。誰かが JavaScript で「これ」に関する優れたチュートリアルを提供してくれたらと思います。

4

2 に答える 2

1

Function.prototype.bindES5 で導入されたを無視thisすると、関数の呼び出し方法によって の値が設定されます。

関数が修飾されていない識別子で呼び出された場合、たとえば

foo();

次に、関数に入ると、thisですundefined。非厳密モードではグローバル オブジェクト (ブラウザのウィンドウ) に設定され、厳密モードでは のままになりますundefined

関数がオブジェクトのメソッドとして呼び出される場合、たとえば

someObj.foo();

次に、そのthisオブジェクトに設定されます。

new演算子を使用して関数を呼び出すとthis、 によって作成されたかのように作成された新しいオブジェクトに設定されnew Object()ます。

function Foo(name) {
    this.name = name; // this references a new Object
}

関数が または のいずれcallapplyを使用して呼び出された場合this、非厳密モードでは任意のオブジェクトに設定でき、厳密モードでは任意の値 (null も含む) に設定できます。

したがってthis、実行コンテキスト、スコープ、またはその他とは何の関係もありません。これは、関数がどのように呼び出されるか、または を使用して値がどのように設定されるかに完全に関連していますbind

thisリスナーに関しては、ここで回答されています: onClick Function "this" Returns Window Object

動的にアタッチされたリスナーも同様ですが、リスナーのアタッチに関する記事で扱われている古い IE で対処すべき癖があります。

于 2012-09-20T23:28:18.697 に答える
0

thisはちょっと難しいトピックです。this現在内部で作業している関数の「所有者」を指します。それがどのようなコンテキストまたはスコープthisにあるかに応じて、いくつかの異なることを意味する可能性があります。window通常、これは、ほとんどの JavaScript 変数を追跡し、いくつかの関数を含むオブジェクトを指します。これは、特に明示的に定義されていない限り、すべての JavaScript 関数 (および変数) の所有者がwindow. つまり、次のことが当てはまります。

<script type="text/javascript">
var something = "Hey";
this.something === something;    //these will evaluate to true, because when you  
window.something === something;  //declared the variable `something`, it was assigned  
this === window;                 //to the window object behind the scenes.
</script>

ただし、常に を参照するとは限りませんwindow。イベント ハンドラー内では、this通常element、イベントをトリガーした を参照します。イベント ハンドラーについて詳しく説明するつもりはありませんが、 を使用した例を次に示しjQueryます。補足 -- jQuery の詳細を学びます。

HTML:

<div id="myDiv"></div>

Javascript:

<script type="text/javascript">
$('#myDiv').bind("click",function() {
                $(this).css("visibility","hidden");   
           });
</script>

この例でthisは、トップ ボックスの html 要素を参照します。これ$()は、要素の jQuery オブジェクトを作成するための構文であるためです。関数を使用できるようにこれを行いましたが、次のcssようなことも簡単に行うことができましたthis.style.visibility = "hidden";

上記の例で要素を参照した理由thisは、舞台裏で jQuery のbindメソッドが次のようなことを行っているためです。

var ele = document.getElementById("myDiv");
ele.onclick = function(){ //the same function as above, but with all the  
                          //behind-the scenes stuff that jquery does to create a jQuery  
                          //object
                        };

関数を に割り当てているため、ele.onclick関数は要素 に「属している」ことに注意してくださいele。したがって、その関数内では、thisを参照する必要がありeleます。

もし私が省略したことで、あなたがまだよく理解していないことがあれば、私に知らせてください。

于 2012-09-20T21:45:46.587 に答える