这个javascript代码有什么问题?

时间:2011-03-24 01:38:11

标签: javascript

<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>

3 个答案:

答案 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)

person1person2是不同的对象,因此他们的比较应该false

但是,您可能需要按字面比较功能,您可以使用toString()进行比较,在这种情况下,警报为true

jsFiddle

当然,他们都有不同的this.name,所以如果他们确实返回了那个,并且你调用了函数并对它们进行了比较,那么它也会false