gpt4 book ai didi

Javascript 模块模式隔离

转载 作者:行者123 更新时间:2023-11-29 16:13:20 25 4
gpt4 key购买 nike

我正在尝试使用模块模式在 javascript 中创建一些隔离。

但是当我运行这段代码时:

var mymap = {};

mymap['230'] = (function () {
privatePageLoad = function(nid, page){
console.log('PAGE LOAD from 230: '+nid);
}

function handleDocummentAdded() {
console.log("New Document in 230!");
privatePageLoad(230, 0);
};

return {
newDocument: handleDocummentAdded
}
})();

mymap['318'] = (function () {
privatePageLoad = function(nid, page){
console.log('PAGE LOAD from 318: '+nid);
}

function handleDocummentAdded() {
console.log("New Document in 318!");
privatePageLoad(318, 0);
};

return {
newDocument: handleDocummentAdded
}
})();

mymap['230'].newDocument();
mymap['318'].newDocument();

我得到以下结果:

New Document in 230! (index):29
PAGE LOAD from 318: 230 (index):40
New Document in 318! (index):44
PAGE LOAD from 318: 318

但我期待:

New Document in 230! (index):29
PAGE LOAD from 230: 230 (index):40
New Document in 318! (index):44
PAGE LOAD from 318: 318

被调用的私有(private)方法总是最后添加到 map ...我做错了什么?

这是一个 jsfiddle http://jsfiddle.net/jpedro/4xdTA/

最佳答案

privatePageLoad 根本不是私有(private)的。添加 var ,否则 privatePageLoad 将是全局的(即全局对象(窗口、模块等)的属性)

将您的代码更改为:

var mymap = {};

mymap['230'] = (function () {
var privatePageLoad = function(nid, page){
console.log('PAGE LOAD from 230: '+nid);
}

function handleDocummentAdded() {
console.log("New Document in 230!");
privatePageLoad(230, 0);
};

return {
newDocument: handleDocummentAdded
}
})();

mymap['318'] = (function () {
var privatePageLoad = function(nid, page){
console.log('PAGE LOAD from 318: '+nid);
}

function handleDocummentAdded() {
console.log("New Document in 318!");
privatePageLoad(318, 0);
};

return {
newDocument: handleDocummentAdded
}
})();

关于Javascript 模块模式隔离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21915580/

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