簡體   English   中英

為什么在類范圍內定義時,公共方法無法訪問私有成員

[英]Why public method cannot access private member when defined within the class scope

在一些javascript視頻教程( JavaScript中的私有成員 )中,對什么是私有,特權成員和公共成員進行了解釋,並顯示了以下代碼示例:

function Emloyee(firstName, lastName){

    // Private field
    var privateFullName;

    // Public fields
    this.firstName = firstName;
    this.lastName= lastName;   

    // Private function 
    var privateGetFullName = function(){
        privateFullName = firstName + " " + lastName; 
        return privateFullName;
    }

    // Privileged function
    this.privilegedGetFullName = function(){
        return privateGetFullName();
    } 

    // Public function
    Employee.prototype.publicGetFullName = function(){
        return this.privilegedGetFullName ();
    }
}

據說公共方法可以調用特權方法,但不能調用私有方法。 如果將在此示例中定義為內部函數的公共函數定義在該類示例之外,則我會對此表示同意,但是在本示例的情況下,它是在存在私有成員的類范圍內定義的,因此為什么不使用該公共函數私有成員是否像關閉一樣有價值?

我還要提到的是,在我觀看本教程之前,在本示例中,它們被稱為特權方法和公共方法,它們既相同又只是公共的(我不知道第一個應稱為特權方法),我們稱其為擴展方法。該類原型作為公共函數,我只是曾經知道必須在已經定義的類中添加帶有this關鍵字的方法時使用原型。

公共方法Employee.prototype.publicGetFullName必須在Employee構造函數之外定義。

當您在內部使用它並引用私有函數時,它將在每個實例中重新定義,因此它將返回上一個創建實例的“私有”數據,而不是此實例。

暫無
暫無

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

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