<html>
<head>
<script type="text/javascript">
function Person (name, age) {
this.name = name;
this.age = age;
this.sayName = function () {
alert(this.name);
}
}
var person1 = new Person ("tom", 29);
var person2 = new Person ("frank", 21);
alert(person1.sayName==person2.sayName);
</script>
</head>
<body>
</body>
</html>
答案 0 :(得分:2)
您正在比较功能针脚,而不是结果。
尝试:
alert( person1.sayName() == person2.sayName() );
但话又说回来:你的sayName()会触发另一个警报()。这段代码到底是什么?
答案 1 :(得分:2)
它没有任何问题(除了第6行略显迂腐的分号。)
因为在构造函数中创建了sayName
函数,所以每次创建新对象时都会创建一个新函数。 (因此函数不同,==
返回false)
人们通过将函数附加到原型对象来解决这个问题:
function Person (name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayName = function () {
alert(this.name);
};
var person1 = new Person ("tom", 29);
var person2 = new Person ("frank", 21);
alert(person1.sayName==person2.sayName);
这将只创建一个功能(节省你的记忆),警报会说'真'。
答案 2 :(得分:1)
person1
和person2
是不同的对象,因此他们的比较应该为false
。
但是,您可能需要按字面比较功能,您可以使用toString()
进行比较,在这种情况下,警报为true
。
当然,他们都有不同的this.name
,所以如果他们确实返回了那个,并且你调用了函数并对它们进行了比较,那么它也会false
。