2013-09-29 42 views
1

我是一個JavaScript的全新手。 在下面的模板和JS函數中,我試圖顯示person1名稱和person2名稱並顯示它們是否相等。這個JavaScript函數是如何工作的?

<!DOCTYPE html> 
<html> 
<head> 
<script> 
function Person(name, age, job){ 
    this.name = name; 
    this.age = age; 
    this.job = job; 
    this.sayName = function(){ 
     alert("in function" + this.name); 
    }; 
} 
var person1 = new Person("Nicholas", 29, "Software Engineer"); 
var person2 = new Person("Greg", 27, "Doctor"); 
alert(person1.sayName()); 
alert(person2.sayName()); 
alert(person1.sayName() == person2.sayName()); 
</script> 
</head> 
<body> 
<div> 

</div> 
</body> 
</html> 

但我正在逐一獲取這些警報。

in functionNicholas 

undefined 

in functionGreg 

undefined 

in functionNicholas 

in functionGreg 

true 

請幫助我控制流程。 如果問題太愚蠢和基本,請原諒我。 謝謝

我不知道爲什麼我得到兩次未定義的警報。

+0

難道你沒有得到警告說'在functionNicholas'? – Barmar

+0

對不起.....是我在功能尼古拉斯 –

回答

2

當你這樣做:

alert(person1.sayName()); 

會出現以下情況:

  1. 它調用person1.sayName()
  2. 這要求alert('in function' + this.name);,這會導致提醒in functionNicholas
  3. sayName函數返回。由於沒有return somevalue聲明,它將返回undefined
  4. 您現在致電alert並返回了該值,因此它與alert(undefined)一樣,這就是爲什麼您會看到undefined已收到警報。

當你這樣做:

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

它呼籲每個人的sayName方法,它提醒他們的名字。他們每個人都返回undefined,所以你做的:

alert (undefined == undefined); 

因爲他們是平等的,這提醒true

4

它警告undefined因爲alert不會返回任何東西,或者更確切地說你的功能,即person1.sayName()不會返回任何東西,它只是警報。

根據您的命名約定sayName是正確的,因爲它通過提醒,打印,顯示或類似方式完成工作,但不必返回任何內容,而且它不會返回任何內容。因此person1.sayName() == person2.sayName()爲真,因爲undefined == undefined

+0

他甚至沒有使用'console.log' –

+0

@JoeSimmons但他使用警報。 – PSL

+0

我知道你想說什麼,但我不知道你爲什麼包含'console.log' –

1

你應該使用:

function Person(name, age, job){ 
    this.name = name; 
    this.age = age; 
    this.job = job; 
    this.sayName = function(){ 
     alert("in function" + this.name); 
    }; 
} 
var person1 = new Person("Nicholas", 29, "Software Engineer"); 
var person2 = new Person("Greg", 27, "Doctor"); 
person1.sayName(); 
person2.sayName(); 
0

sayName()函數不返回任何值,默認返回值是不確定所以什麼ü實際上做的是比較一個未定義的另一個不確定

var x = person1.sayName() 

// x is undefined 

ü可以改變sayName()警告後返回當前的名稱:

this.sayName = function(){ 
    alert("in function" + this.name); 
    return this.name; 
}; 
0

每次運行sayName()函數時,都會在函數中創建一個警報,然後返回undefined。有些東西總是以JavaScript返回,如果沒有指定,那麼它是未定義的。

您首先打印Nicholas的sayName,提醒他的名字,然後返回undefined。然後您會提醒返回的值(未定義)。

對Greg重複。

最後一行比較兩個,它們先提醒它們的名字,然後比較兩個返回的函數(換句話說,undefined == undefined,它是TRUE)。然後提醒。

0

其他答案是正確的。另外,爲了進行比較,在你的最後一次警報中,我想你想檢查這些人的名字是否相同。

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

爲此,您可以使用上面的「點語法」訪問每個對象的name屬性。 ===(三等於)運算符是以此語言進行比較的最佳運算符。你應該更喜歡它的標準[不可靠] ==

相關問題