2017-01-01 9 views
0
function Animal(name, numLegs) { 
    //console.log(this) //{} 
    this.name = name; 
    this.numLegs = numLegs; 

     // console.log(this) //{ name: 'Captain Cook', numLegs: 2 } 
     //console.log(penguin) //{ name: 'Captain Cook', numLegs: 2 } 
    //console.log(typeof(this)) //object 
    //console.log(typeof(penguin)) //object 
    //console.log(this===penguin)//flase 
    console.log(this==penguin);//flase 

} 



// create the sayName method for Animal 


Animal.prototype.sayName = function() { 
    //console.log("Hi my name is"+ " " + this.name); 
    //console.log(this) //{ name: 'Captain Cook', numLegs: 2 } 
    //console.log(this===penguin) //true 
}; 

// provided code to test above constructor and method 
var penguin = new Animal("Captain Cook", 2); 
penguin.sayName(); 

.............................. .................................................. .................................................. ...................... なぜthis==penguin false 2つの値が同じでも偽っていますか? ............. .................................................. .................................................. ..............................................2つの値が等しい場合でもfalseを返す

答えて

0

そのコード内のコメントアウトされていないconsole.log(this === penguin);行だけが実行されますの前にpenguinがありますtをnew経由でAnswerに呼び出した結果になります。したがってpenguinundefinedであり、もちろん新しいオブジェクトは=== undefinedではありません。 ショー真のでしょう、あなたのコードの後のコメントアウトconsole.log(this === penguin);ラインの一つに対し

function Animal() { 
 
    console.log("first", typeof penguin); // undefined 
 
} 
 
var penguin = new Animal(); 
 
console.log("second", typeof penguin); // object

::1はを使用

penguinの値を示す。この単純な例を考えてみましょうの後にnew Animalの式が完了し、結果はpenguin

に割り当てられました。

function Animal() { 
 
    console.log("first", typeof penguin); // undefined 
 
} 
 
Animal.prototype.sayName = function() { 
 
    console.log("third", typeof penguin); // object 
 
    console.log("equal?", this === penguin); // true 
 
}; 
 
var penguin = new Animal(); 
 
console.log("second", typeof penguin);  // object 
 
penguin.sayName();

+1

非常にありがとう、あなたのための素晴らしい説明!!!!!!! – rcodeman

+0

@rcodeman:助けてくれてうれしい!この(または他の回答)*あなたの質問に答えた場合は、受諾したい回答の横にあるチェックマークをクリックして、受け入れたことを示すことができます。それは "未回答の質問"リストから質問を取ります。その他[ここ](/ help/someone-answers) –

1

JavaScriptでは、文字列や整数などのプリミティブの値が他の言語と同じであるかどうかの等価性がチェックされます。しかし、JavaScriptオブジェクトは、これらのオブジェクトの参照が同じ場合にのみ等しいとみなされます。 (両方が同じオブジェクトを参照している場合)2つの異なるオブジェクトである場合、すべての属性が同じであっても、等しいとみなされません。

プロトタイプコンストラクタと、コンストラクタを使用して作成したオブジェクトの等価性を確認しています。属性は同じですが、これらの2つのオブジェクトへの参照は等しくありません。したがって、あなたは偽になります。

関連する問題