ホームページ  >  記事  >  ウェブフロントエンド  >  これについての JavaScript での簡単な説明

これについての JavaScript での簡単な説明

怪我咯
怪我咯オリジナル
2017-03-29 14:56:53954ブラウズ

これは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 が wi​​ndow を指しているので、関数 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。