ホームページ  >  記事  >  ウェブフロントエンド  >  Javascript の面接の質問 エッセイ_JavaScript スキル

Javascript の面接の質問 エッセイ_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 18:08:521478ブラウズ
コードをコピーします コードは次のとおりです。

var Fundamental = {count:1}; function Test( ){}
Test.prototype = Fundamental;
Test.prototype.increase = function(){this.count ;};
var test = new Test(); log(test .count);
var test2 = new Test();
test.increase(); .count と test2.count はそれぞれいくらですか


一昨日の面接中に遭遇した質問 面接の質問は、おそらく test.increase が呼び出されるとき、カウント値は何ですかというものでした。 test と test2 をそれぞれ
まず、これに答えてください。この質問は、この状況を別の同様の状況と混同する可能性があります:
コードが次のように変更されたとします:




コードをコピーします
コードは次のとおりです。 function FundamentalModified(){ var count = 1;
this.increase = function(){
カウント ;
}
this.show = function(){
return count;
}
}
function TestModified(){}
TestModified.prototype = new FundamentalModified();
var test3 = new TestModified();
test3.increase(); test3.show() とは.show() をそれぞれ


質問をこれに変更すると、はるかに簡単になります。しかし、2 つの質問では同じ結果が得られません。
========================================== 分ける
面接の質問に戻りますが、面接の質問の答えは実際には 2 と 1 です。理由: test.count は test の属性であり、test2.count は実際には test2.__proto__ の属性です。
test.increase() が呼び出されると、JS は this.count ==> を実行します。 this.count = this.count 1;
this.count
=
this.count
1;


この一見単純な文は、実は珍しい意味を持っています~~

この文が実際に意味するのは、インスタンスの新しい属性を作成することであり、この属性には this.count 1 の値が割り当てられます。

そして、
this.count

は、実際にはプロトタイプチェーン内のカウントです。つまり、

が初めて を実行するとき、this.count は実際には次のように動作します:

this.count = Test.Prototype.count 1;

hasOwnProperty を使用して検証できます: var test = new Test()の場合。 test.hasOwnProperty("count") === falsetest.increase() 後。 test.hasOwnProperty("count") === true
一般的に、JS は依然として非常に楽しい言語です。

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