簡體   English   中英

這行Js代碼到底在做什么?

[英]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中,可以將變量分配為數字或字符串。 在這種特殊情況下,將名為changeNameperson屬性分配給功能changeName 通過此分配,您可以changeName此探測來調用changeName函數( me.changeName("Bashar");

沒有那行代碼,您可以在person對象的范圍調用changeName(name)函數。 但是使用該行代碼,您可以從范圍外部調用該函數,例如朝底部的行:me.changeName(“ Bashar”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM