[英]What is this line of Js code exactly doing?
我正在學習JavaScript中的對象,並且正在使用一個函數來構造對象並向其中添加方法。 很明顯,有一種方法可以更改對象的名字,但是this.changeName = changeName;行的內容是什么?
到底是做什么的? 如果刪除它或將changeName函數名稱更改為其他名稱,則會發生錯誤,並且不會顯示任何內容。 刪除這一行代碼也會導致錯誤,因此看來運行代碼至關重要,但我真的不知道它能做什么。
<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呈現在屏幕上。
謝謝。
您正在將changeName
作為person
一部分進行訪問。 將其視為公開changeName
。
沒有它,您將無法執行me.changeName
因為me.changeName
不再存在於person
范圍之外。
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
; 不帶括號,它將對功能changeName
的引用分配給this.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;
};
您可能已經在Javascript中聽說過,所有東西都是對象。 當您在職能人員之內時,您也就在“對象中”。 因此,這是指對象。 在此函數中聲明嵌套函數將使其僅在函數上下文中可見,而在其他任何地方都不可見。 要使其可用於外部世界,您必須將其分配給對象字段,否則無法從外部調用它。 如果您熟悉面向對象的編程,則可以將其視為類的方法(JS中沒有真正的類)。
同樣的事情是:
function person(firstName, lastName, age){
this.firstName=firstName;
this.lastName=lastName;
this.age=age;
this.changeName = function(name){
this.firstName=name;
}
}
當您在人員實例的范圍內調用此方法時。 “ this”總是指該特定實例。
一個可以總結為:
this.changeName = changeName; ->將仍未定義的本地對象changeName分配給對象字段changeName
函數changeName(name)->將本地對象changeName聲明為一個函數。
請記住-在JavaScript中,一切都是對象函數,變量,數組,...
在javascript中,可以將變量分配為數字或字符串。 在這種特殊情況下,將名為changeName
的person
屬性分配給功能changeName
。 通過此分配,您可以changeName
此探測來調用changeName
函數( me.changeName("Bashar");
)
沒有那行代碼,您可以在person對象的范圍內調用changeName(name)函數。 但是使用該行代碼,您可以從范圍外部調用該函數,例如朝底部的行:me.changeName(“ Bashar”)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.