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 をそれぞれ
まず、これに答えてください。この質問は、この状況を別の同様の状況と混同する可能性があります:
コードが次のように変更されたとします:
コードをコピーします
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 は依然として非常に楽しい言語です。