2012-07-31 88 views
1

當我運行這個腳本時,我在警告框中獲得說話功能代碼。應該是「你好!」不是function(){alert(「Hello!」)}; 。我使用警報,因爲我似乎更喜歡使用console.log進行學習。沒有說話功能,腳本工作正常。我在警告框中獲得了功能代碼,爲什麼?

function person(firstname,lastname,age,eyecolor) { 
    this.firstname=firstname; 
    this.lastname=lastname; 
    this.age=age; 
    this.eyecolor=eyecolor; 
    this.newlastname=newlastname; 
    this.speak=function(){alert("Hello!")}; 
} 

var myFather=new person("John", "Doe", 45, "blue"); 
var myMother=new person("Sally","Rally", 48,"green"); 

function newlastname(new_lastname) { 
    this.lastname=new_lastname; 
} 

myMother.newlastname("Doe"); 
alert(myMother.lastname); 
alert(myMother.speak); 

回答

3

更改最後一行

myMother.speak(); 

對於採取字符串的函數,(如,alert()),如果你在一個函數傳遞,它會認爲這意味着的源代碼功能。所以,當你通過myMother.speakalert時,它採用了源代碼,因此你看到了結果。

(如果任何人都可以在此展開進一步或提供有用的鏈接,隨意編輯這個答案)

+0

謝謝,我也拿出了警報,並用myMother.speak()替換了它。因爲這是雙重警報。再次感謝你 – 2012-07-31 00:41:35

+1

是的,我意識到,所以我改變了答案,以避免雙重警報。 – 2012-07-31 00:42:27

+1

您可能會對此進行擴展,以解釋爲什麼,對於未來發現它的新JS程序員。 – 2012-07-31 00:50:15

1

我得到的警告框的功能代碼,這是爲什麼?

以及多數民衆贊成原因您正在引用的函數,而不是調用它,它似乎alert()可調用的參數toString()功能,並且在函數引用調用tostring()似乎返回源爲一個字符串,因此當你提醒你獲得源代碼時,雖然這只是一種預感,因爲警報似乎是在本地實現的,所以我不能說它是如何實現的。

我也不能說這種行爲在所有瀏覽器中都是一致的。

相關問題