gpt4 book ai didi

javascript - 在 Javascript 中访问私有(private)成员的公共(public)方法

转载 作者:行者123 更新时间:2023-11-29 19:46:28 25 4
gpt4 key购买 nike

我希望能够在 Javascript 中创建一个对象,该对象具有可以访问该对象的私有(private)成员的公共(public)方法。但是,我听说每次创建对象时都声明公共(public)方法会产生开销,所以我宁愿避免这种开销。因此,例如,这段代码将执行我想要的操作:

function createMyObject(parameter) {
var that = {};

var privateVariable,
privateMethod = function () { return 1; };

that.publicVariable = 0;

that.publicMethod = function () {
privateVariable = privateMethod();
}

return that;
}

但每次有人调用 createMyObject 时,它都必须创建函数来设置公共(public)方法。相反,如果我这样做:

function MyClass(parameter) {
var privateVariable,
privateMethod = function () { return 1; };

this.publicVariable = 0;
}

MyClass.prototype.publicMethod = function () {};

在这里,我可以避免每次构造对象时都必须创建新函数来设置公共(public)方法,但这些公共(public)方法无法访问对象的私有(private)成员。

有没有什么方法可以避免每次构造对象时都必须为公共(public)方法创建新函数的开销,同时又能让它们访问私有(private)成员?

最佳答案

不,你不能。

能够访问私有(private)变量的公共(public)方法称为特权方法

来自 Private Members in JavaScript , 道格拉斯·克罗克福德 (Douglas Crockford):

A privileged method is able to access the private variables and methods, and is itself accessible to the public methods and the outside. It is possible to delete or replace a privileged method, but it is not possible to alter it, or to force it to give up its secrets.

Privileged methods are assigned with this within the constructor.

然后,您不能使用原型(prototype)声明特权方法。

关于javascript - 在 Javascript 中访问私有(private)成员的公共(public)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19171128/

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