2012-06-09 26 views
6

我正在瀏覽一個JavaScript教程,我可以完成它。但問題是,我不明白這其中的一條線正在做什麼。我有一個函數setAge(),然後在創建一個susan對象之後,我將其中一個屬性設置爲該函數的名稱?我不明白爲什麼這樣做。如果不這樣做,我不能使用函數/方法嗎?Noob關注:JavaScript函數的使用

教程代碼:

var setAge = function (newAge) { 
    this.age = newAge; 
}; 

var susan = new Object(); 
susan.age = 25; 
susan.setAge = setAge; //how the hell does this work? 

// here, update Susan's age to 35 using the method 
susan.setAge(35); 

回答

8

它分配susan的屬性setAge上面定義的函數,

function (newAge) { 
    this.age = newAge; 
}; 

其是接受一個參數的函數。當susan.setAge(35);被調用時,this將把來電,susan,她的年齡更新爲35

這種混亂可能是從setAge被使用了兩次。蘇珊的功能在左側定義,右側已經定義。例如:

susan.letMyAgeBe = setAge; 
susan.letMyAgeBe(35); 

的工作原理是一樣的。 setAge也是「可重用」:

harry = new Object(); 
harry.iAmThisOld = setAge; 
harry.iAmThisOld(55); 

演示http://jsfiddle.net/7JbKY/2/

0

它的工作原因是因爲變量範圍。

第一setAge變量只是一個功能,你可以這樣調用它:setAge(24) 這不是比function setAge(age) {this.age = age}

這麼多不同的後您聲明setAge變量,並設置它的內容的功能,可以設置其他變量到這個變量。你在對象中做什麼就是這樣。寫完之後susan.setAge = setAge;您的對象的setAge屬性將等於之前的setAge變量,它是一個函數。所以,你可以撥打susan.setAge()

0

讓我們來看看什麼是被定義的代碼 -

var setAge = function (newAge) { 
    this.age = newAge; 
}; 

這裏一個函數,它會改變的變量年齡進行一個對象在調用該函數時指定的對象。

var susan = new Object(); 
susan.age = 25; 
susan.mynewageis = setAge; 

這裏我們設置預定值susan.age將由功能改變,我們正在設置的功能變量susan.mynewageis的值,使功能提供下一次在其他情況下。

susan.mynewageis(35); 

,我們在這裏爲調用函數時指定susan.age的值設置爲35。

我打算髮布這個答案,但錯誤我按提交按鈕並張貼不完整的答案。