2011-03-24 159 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