gpt4 book ai didi

javascript - 动态附加函数以授予对私有(private)变量的访问权限

转载 作者:行者123 更新时间:2023-11-30 13:36:32 25 4
gpt4 key购买 nike

我正在尝试为我的对象动态分配回调,但我似乎无法在授予此函数对私有(private)变量的访问权限时想出一种方法来执行此操作。我在下面列出了相关代码,并附上了我遇到问题的注释。

对象工厂

function makeObj ( o ) {
function F() {}
F.prototype = o;
return new F();
}

模块

var MODULE = (function(){
var myMod = {},
privateVar = "I'm private";
return myMod;
})();

各种尝试


myMod.someDynamicFunc = function someDynamicFunc(){
//privateVar === undefined;
alert( privateVar );
}
myMod.someDynamicFunc();

myMod.prototype.someDynamicFunc = function someDynamicFunc(){
//ERROR: Cannot set property 'someDynamicFunc' of undefined
alert(privateVar);
}
myMod.someDynamicFunc();

在这次尝试中,我尝试在模块对象中创建一个 setter……但无济于事。

var MODULE = (function(){
var myMod = {},
privateVar = "I'm private";

myMod.setDynamicFunction = function ( func ){
if(func !== undefined && typeof func === "function"){
//Uncaught TypeError:
// Cannot read property 'dynamicFunction' of undefined
myMod.prototype.dynamicFunction = func;
//also tried myMod.dynamicFunction = func;
}
}
return myMod;
})();

var myModule = makeObject( MODULE );

myModule.setDynamicFunction(function(){
alert(privateVar);
});

myModule.dynamicFunction();

我只是用错了 JavaScript 吗?我真的很想能够在对象启动后分配回调。这可能吗?

最佳答案

您不能通过动态设置的回调函数访问私有(private)变量(因为如果稍后附加它,它就不能成为闭包),但您可以设置一个系统,通过它您可以访问该变量:

var MODULE = (function(){
var myMod = {},
privateVar = "I'm private";

myMod.callback = function(fn) {fn(privateVar);};

return myMod;
})();

var someDynamicFunc = function(param) {alert(param);};
myMod.callback(someDynamicFunc);

当然,这并不是真正的隐私,因为任何人都可以这样做。我不明白你怎么可能拥有一个通过动态附加函数访问的“私有(private)”变量,而不允许任何其他人的动态附加函数具有相同的特权(从而使其不是真正的私有(private))。

关于javascript - 动态附加函数以授予对私有(private)变量的访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4608125/

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