gpt4 book ai didi

javascript - 如何创建特权 JS 方法?

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

我希望能够调用使用私有(private)数据的子函数。目前我有这个:

var myFunction4 = function() {
this.secret1 = 0;
this.secret2 = 0;
var that = this;

this.iterate1 = function(){
return that.secret1++;
}

this.iterate2 = function(){
return that.secret2++;
}

this.addSecrets = function(){
return that.secret1 + that.secret2;
}

return {
iterate1: this.iterate1,
iterate2: this.iterate2,
addSecrets: this.addSecrets,
}
};

这样做的坏处是要调用其中一个方法,我必须这样做:

myFunction4().iterate1();

每次我想访问一个方法时都会执行myFunction4()。这不仅效率低下,而且每次都会重置 secret1 所以我无法迭代它。我尝试过使用 new 运算符,但这会暴露 Secret1 和 Secret2,并且会扰乱深度嵌套函数的能力。

var myFunction3 = function() {
this.secret1 = 0;
this.secret2 = 0;

this.iterate1 = function(){
return this.secret1++;
}

this.iterate2 = function(){
return this.secret2++;
}

this.addSecrets = function(){
return this.secret1 + this.secret2;
}
};
var f3 = new myFunction3();
f3.secret1; // exposes the secret!

请参阅console logs at the bottom of this JSFiddle了解更多示例。

如何拥有一个同时具有私有(private)和公共(public)变量/方法的函数,并且保留其值并且不需要多次调用?

最佳答案

虽然其他答案绝对正确且正确,但在 JavaScript 中模拟 OOP 行为时还需要考虑一个问题。

function execution context当我们尝试使用公共(public)方法作为例如异步。打回来。

神奇的this将指向一个与我们在OOP世界中期望的不同的对象。

当然有一些方法可以绑定(bind)上下文,但为什么在我们在非 OOP js 中定义“类”之后还要担心这个问题;)

这里有一个简单的this解决方案:不要使用this。让闭包重构 this ;)

var myFunction4 = function() {
// we could inherit here from another 'class' (object)
// by replacing `this` with e.g. `new SuperClass()`
var that = this;

// 'private' variables
var secret1 = 0;
var secret2 = 0;

// 'public' variables
that.somePublicVar = 4;

// 'private' methods
var somePrivateMethod = function(){
secret2 = 77;
that.somePublicVar = 77;
}

// 'public' methods
that.iterate1 = function(){
return secret1++;
}

that.iterate2 = function(){
return secret2++;
}

that.addSecrets = function(){
return secret1 + secret2;
}

return that;
};

var f = new myFunction4();
console.log( f.iterate1() ); // 0
console.log( f.iterate1() ); // 1
console.log( f.secret1 ); //undefined
console.log( f.somePublicVar ); //4

关于javascript - 如何创建特权 JS 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40061445/

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