gpt4 book ai didi

javascript - 为什么在类范围内定义时公共(public)方法无法访问私有(private)成员

转载 作者:行者123 更新时间:2023-12-03 07:52:38 25 4
gpt4 key购买 nike

在一些 javascript 视频教程 ( Private members in JavaScript ) 中,对什么是私有(private)成员、特权成员和公共(public)成员进行了解释,并显示了这段代码示例:

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 ();
}
}

据说公共(public)方法可以调用特权方法,但不能调用私有(private)方法。如果本示例中定义为内部函数的公共(public)函数将在此类示例之外定义,我会同意这一点,但在本示例中,它是在存在私有(private)成员的类范围内定义的,那么为什么公共(public)函数不采用私有(private)成员值和闭包一样吗?

另外,在观看本教程之前,我要提到的是,在这个示例中,对我来说,所谓的特权方法和公共(public)方法是相同的,而且都是公共(public)的(我不知道第一个应该称为特权方法),我们称之为将类原型(prototype)扩展为公共(public)函数,我只是知道当我们必须向已定义的类添加带有 this 关键字的方法时应该使用原型(prototype)。

最佳答案

公共(public)方法Employee.prototype.publicGetFullName必须在Employee构造函数之外定义。

当您在内部使用它并引用私有(private)函数时,它将在每次实例化时重新定义,因此它将返回最后创建的实例的“私有(private)”数据,而不是此实例。

关于javascript - 为什么在类范围内定义时公共(public)方法无法访问私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34942522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com