gpt4 book ai didi

javascript - 访问要修改的对象的复制版本?

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

如果我将代码复制到这样的闭包中

(function(){
var private1 = {},
private2 = {},
publik;

publik.get(object){
private1[object.name] = object;
};

window.publik = publik;
}())


publik.get({
// API
name: 'name_foo',
functionA: function(){
// I can not access private2 in here
},
functionB: function(){}
})

有没有一种方法可以让 API 工作,以便 functionA 和 functionB 可以访问闭包内的 private 2。

它们将被复制到闭包中,因此复制的版本应该可以访问它。这就是为什么我做了闭包并将 private1 和 private2 像这样放在一起。

对象的书面版本(而不是复制版本)在 jslint 中抛出错误,我的猜测是这是因为它违反了范围规则。

函数参数(不是参数)是全局范围内的未命名变量,无法访问闭包。

(直到将其复制到其中:)

如果我将 private1private 2 设为同一个对象,比如...只是 private...然后访问它,它会起作用吗使用 this 关键字。

不过,我更愿意将它们分开。

最佳答案

您的代码有语法错误,get 似乎最好命名为 set。此外,您的代码似乎并不特定于浏览器,因此最好使用更通用的 global 对象,而不是特定的 window 对象。

考虑这样的事情:

(function(global){
var private1 = {name: 'private1'},
private2 = {name: 'private2'},
publik;

publik = {
set: function (object) {
private1[object.name] = object;
}
};

global.publik = publik;
}(this))

publik.set方法可以通过闭包访问private1private2,您可以通过Douglas解释的特权方法访问它们克罗克福德在他的文章中Private Members in JavaScript 。扩展上面的内容,可能是:

    publik = {

set : function (...) {
...
},

getPrivate1: function (name) {
return (typeof name == 'string')? private1[name] : private1;
},

...

};

关于javascript - 访问要修改的对象的复制版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12829681/

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