2017-01-01 37 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

回答

0

该代码中唯一没有注释掉的console.log(this === penguin);行在执行之前penguin是se t通过new致电Answer的结果。所以penguinundefined,当然,新的对象不是=== undefined

考虑显示的penguin值这个简单的例子:

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

尽管后来注释掉console.log(this === 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:很高兴帮助!如果这个(或其他答案)*回答了你的问题,你可以点击你想接受的答案旁边的复选标记以表明它已被接受。这将问题从“未回答的问题”列表中删除。更多[here](/ help/someone-answers)。 –

1

在JavaScript中,对诸如字符串和整数等原始值进行等式检查的方式与在任何其他语言中相同。但是,只有当这些对象的引用相同时,JavaScript对象才会被视为相同。 (如果两者都指的是同一个对象。)即使所有属性都是相同的,如果它们是两个不同的对象,它们也不会被视为相等。

您正在检查原型构造函数和使用构造函数创建的对象的相等性。尽管属性相同,但这两个对象的引用并不相同。因此你得到错误。

相关问题