2011-03-24 107 views
0
<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> 
+1

这取决于你期望它做什么。 – 2011-03-24 01:41:16

+0

你期待它做什么?发生了什么呢? – 2011-03-24 01:41:47

+0

Dreamweaver说我在第7行有一个语法错误(this.name = name;)。那么什么是语法错误。谢谢 – jsnewman 2011-03-24 02:25:24

回答

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

这将创建只有一个函数(节省您的内存)和警报会说'真'。

+0

谢谢你的帮助。 – jsnewman 2011-03-24 02:27:53

+0

可以将Person.sayName = function(){alert(this.name)}更改为 Person.prototype.sayName = function(){alert(this.name)}? – jsnewman 2011-03-24 02:39:32

+0

啊哈,哇。是的,我的坏是一个错字。它的意思是'Person.prototype.sayName'。我编辑它是正确的。 – david 2011-03-24 02:43:24

1

person1person2是不同的对象,所以他们比较应该false

但是,您可能打算比较字面上的功能,您可以使用toString(),在这种情况下,警报为true

jsFiddle

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

+0

谢谢你的帮助 – jsnewman 2011-03-24 02:26:57

2

您正在比较函数pinters,而不是结果。

尝试:

alert(person1.sayName() == person2.sayName()); 

不过话又说回来:你sayName()触发另一个警报()。这个代码是关于什么的?

+0

非常感谢你 – jsnewman 2011-03-24 02:27:15