2013-08-28 41 views
0

我正在學習JavaScript中的對象,我正在使用一個函數來構造一個對象並向其中添加一個方法。所以很明顯,有一種方法可以更改對象的firstName,但是該行是什麼? this.changeName = changeName;
究竟是做什麼的?如果我刪除它或將changeName函數名更改爲其他內容,則會發生錯誤並且不顯示任何內容。而刪除這行代碼也會導致錯誤,所以它似乎是代碼運行的關鍵,但我真的無法弄清楚它的功能。這段Js代碼究竟是幹什麼的?

<script> 

function person(firstName, lastName, age){ 
    this.firstName=firstName; 
    this.lastName=lastName; 
    this.age=age; 
    this.changeName=changeName; 

    function changeName(name){ 
     this.firstName=name; 
    } 
} 
me = new person("Hazem", "Khadash", 18); 
me.changeName("Bashar"); 
document.write(me.firstName); 

據我所知的代碼,創建我,changeMe()函數被調用作爲方法然後person.lastName呈現在屏幕上。

謝謝。

回答

1
function person(firstName, lastName, age) { 
    ... 

    function changeName(name){ 
     this.firstName=name; 
    } 
} 

創建一個函數,僅僅是功能person內可用。正如你所發現的,只有這樣纔會使me.changeName(…)無效,因爲該功能在person之外無法訪問。

this.changeName = changeName 

使得該函數的功能person外部訪問,所以你可以再打me.changeName

注意這是this.changeName = changeName,而不是this.changeName = changeName()。用括號,調用函數並將其輸出分配到this.changeName;沒有括號,它將參考分配給功能changeNamethis.changeName

你可以將其更改爲這一點,這是等價的:

function person(firstName, lastName, age) { 
    ... 
    this.changeName = function(name){ 
     this.firstName=name; 
    } 
} 

寫你person「類」最好的辦法可能是這樣的:

function person(firstName, lastName, age) { 
    this.firstName = firstName; 
    this.lastName = lastName; 
    this.age = age; 
} 

person.prototype.changeName = function changeName(name){ 
    this.firstName = name; 
}; 
2

您正在使changeName作爲person的一部分訪問。把它看作暴露changeName

沒有它,你不能做me.changeName因爲me.changeName不再存在於person的範圍之外。

0

在JavaScript函數中可以將變量分配爲數字或字符串。在這種特殊情況下,名爲changeNameperson屬性被分配功能changeName。這種分配可以讓你調用changeName功能槽此proberty(me.changeName("Bashar");

0

沒有該行的代碼,你可以調用中的changeName(name)函數在範圍內的person對象。但是用這行代碼,你可以從範圍外調用的那個函數,比如向下的那行:me.changeName(「Bashar」)。

1

正如你可能已經在Javascript中聽到一切都是一個對象。當你在功能人員中時,你也是「在對象中」的人。所以這是指對象。在這個函數中聲明一個嵌套函數使得它僅在函數的上下文中可見,而不在其他任何地方。爲了使其可用於外部世界,您必須將其分配給對象字段,否則無法從外部調用它。你可以把它看作一個類的方法(在JS中沒有真正的類) - 如果你熟悉面向對象編程。

同樣的事情將是:

function person(firstName, lastName, age){ 
    this.firstName=firstName; 
    this.lastName=lastName; 
    this.age=age; 
    this.changeName = function(name){ 
    this.firstName=name; 
    } 
} 

當你打電話的人一個實例的範圍內,這種方法。 「這個」總是指那個特定的例子。

可以總結一下:

this.changeName = changeName; - >將尚未定義的本地對象changeName分配給對象字段changeName

function changeName(name) - >將本地對象changeName聲明爲函數。

記住 - 在JavaScript中一切都是對象函數,變量,數組,...

+0

我要承認,所選擇的名稱_object-field_是不是一個好的選擇。正確的將是**屬性** – SeDav