これはjsとは何ですか?これについては、ブログパークにたくさんの説明がありますが、読んでみると少し複雑に感じたので、簡単にわかりやすく定義してみます。
これは実際にはjsのオブジェクトですが、それは何ですか?それはとても単純です、このオブジェクトは次のとおりです: それを呼び出す人は誰でもそれを呼び出す人を指します。
この点については、実はブログパークの記事でもかなり解説されており、その点について触れている記事もありますが、まだ説明が曖昧です。 ここで、簡単な対照実験をいくつかやってみます。これらの管理された実験の結果に基づいて、誰もが非常に明確になるはずです。
私のコードに基づいて以下の実験を繰り返していただければ幸いです。
まず、次のコードを見てみましょう:
//创建一个局部对象a var a = { user:'小东', getName:function(){ return this.user;//返回当前对象的user属性值 } } //调用a的getName方法 alert(a.getName());
上記のコードは何を出力しますか?はい、ここでのアラートは... Xiaodong... これは非常に単純です。これはオブジェクト a 内で this と呼ばれます。これを呼び出すのはオブジェクト a である必要があります。したがって...によると、this を呼び出す人は を指します。定義・・・・・・・・・・・・すると、ここでは a オブジェクトを指します。
次に、上記のコードに別の行を追加しましょう:
//创建一个局部对象a var a = { user:'小东', getName:function(){ return this.user;//返回当前对象的user属性值 } } //调用a的getName方法 alert(a.getName()); //把局部对象的属性函数赋值给外面的变量out var out = a.getName; //调用out函数 alert(out());
上記の実験結果によると、a.getName を直接呼び出した場合の出力は Xiaodong であることがわかりますね。それでは、属性関数 a.getName を out 変数に割り当てた後、再度呼び出すと何が出力されるでしょうか?結果は、未定義です。なぜ未定義なのでしょうか?ちょっと考えてみてください。ここでの出力が未定義である理由を理解していれば、これを明確に理解していると思います。ただし、この記事に興味がある場合は、読み続けてください。
ここでは、a オブジェクトを外部から参照する getName 関数が a オブジェクト内の値を取得できない理由については説明しません。角を変えて次のコードを見てみましょう (実際には上記と似ています)。 code) , haha):
//创建一个局部对象a var a = { user:'小东', getName:function(){ return 1;//这里我们不返回this,而是返回1 } } //调用a的getName方法 alert(a.getName()); //把局部对象的属性函数赋值给外面的变量out var out = a.getName; //调用out函数 alert(out());
上記のコードは非常に単純ですよね? ここでは、a のオブジェクトの getName 属性関数で a のオブジェクトを返すのではなく、...1 を返します。・・・ さて、もう一度 out 関数を呼び出したら、何が出力されると思いますか?そう、得られるものはもう…不定……ではなく、実数……1……です。それは変ですよね? a.getName 関数が a オブジェクトのユーザー属性を返すとき、out を使用して a.getName 関数を参照すると、未定義の結果が得られます。また、a.getName 関数が 1 を返すときは、Can out 参照を使用します。 a.getName 関数ですが、a.getName の内容を取得しますか?どうしたの?
その理由は非常に簡単です。外部グローバル変数 out を呼び出すと、これはオブジェクトではなく、out となるべきオブジェクトを指します。out のオブジェクトは誰でしょうか。 js でグローバルに宣言された変数のオブジェクトは
window オブジェクト であることを知っておく必要があります。 呼び出し時には this.user が window を指しているので、関数 out=a.getName=function(){return this.user;} で this.user に対して window.user を記述する必要がありますよね? しかし、現時点では、グローバル変数に window.user のプロパティ値はありますか?いいえ? window.user の属性値がないため、alert(window.user) は未定義でなければなりません。これを証明するために、次の実験を行ってみましょう:
//创建一个局部对象a var a = { user:'小东', getName:function(){ return this.user;//返回当前对象的user属性值 } } //调用a的getName方法 alert(a.getName()); //把局部对象的属性函数赋值给外面的变量out var out = a.getName; //我们增加一个window.user的全局属性,看看再次调用out函数会输出什么 var window.user='window"s username'; //调用out函数 alert(out());
この時点で、上記のコードを再度実行すると、out 関数の出力が未定義ではなく、ウィンドウのユーザー名であることがわかります。これが証明します。何?これは、out がこれを呼び出すと、これがウィンドウを指すことを証明します。また、これを呼び出す人を指すことも証明されます。
js のグローバル変数が理解できない場合は、上記のコードを次のコードに置き換えて呼び出すと、よりよく理解できるようになります:
//创建一个局部对象a var a = { user:'小东', getName:function(){ return this.user;//返回当前对象的user属性值 } } //调用a的getName方法 alert(a.getName()); //把局部对象的属性函数赋值给外面的变量out var out = a.getName; //此刻,我们增加一个user的变量,看看再次调用out函数会输出什么 var user='window"s username'; //调用out函数 alert(out());
ここでは、ウィンドウを有効にしませんobject 、外部プロパティと関数については、常に var を使用して宣言します。これらはすべて var で宣言されているため、すべて同じオブジェクトを指す必要があります。この時点で、上記のコードを再度実行すると、つまり out 関数を実行すると、ウィンドウのユーザー名を警告することができます。この記事を書いている時点では、これ以上明確な定義はありません。それは、それを呼んだ人が誰を指しているのかということです。
これを理解するのは難しいことではありません。理解するのが難しいのは、これを呼び出すオブジェクトを見つけたときにのみ、これが誰を指しているのかを知ることができるということです。なぜなら、this の定義は次のとおりです。 : それを呼び出す人は誰でも、それを呼び出す人を指します。
以上がこれについての JavaScript での簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。