javascript设计模式揭示了模块模式是如何工作的?
我目前正在学习javascript和设计模式,我读了这段我不理解的代码。 为什么以及如何访问返回对象?? 我知道这是函数中被调用的函数;我了解范围(我想我了解范围,但显然不了解)。。 在这里,我很困惑为什么我们可以访问返回对象内部的内容,而不能访问其余的内容..为什么返回对象是公共的 你能给我解释一下吗,或者给我一个链接 (英语不是我的第一语言,这是我在这里的第一个问题,如果我违反了规则,请道歉) 守则:javascript设计模式揭示了模块模式是如何工作的?,javascript,design-patterns,revealing-module-pattern,Javascript,Design Patterns,Revealing Module Pattern,我目前正在学习javascript和设计模式,我读了这段我不理解的代码。 为什么以及如何访问返回对象?? 我知道这是函数中被调用的函数;我了解范围(我想我了解范围,但显然不了解)。。 在这里,我很困惑为什么我们可以访问返回对象内部的内容,而不能访问其余的内容..为什么返回对象是公共的 你能给我解释一下吗,或者给我一个链接 (英语不是我的第一语言,这是我在这里的第一个问题,如果我违反了规则,请道歉) 守则: // we write the entire object logic as privat
// we write the entire object logic as private members and
// expose an anonymous object which maps members we wish to reveal
// to their corresponding public members
var namesCollection = (function() {
// private members
var objects = [];
function addObject(object) {
objects.push(object);
}
function removeObject(object) {
var index = objects.indexOf(object);
if (index >= 0) {
objects.splice(index, 1);
}
}
function getObjects() {
return JSON.parse(JSON.stringify(objects));
}
// public members
return {
addName: addObject,
removeName: removeObject,
getNames: getObjects
};
})();
namesCollection.addName("Bob");
namesCollection.addName("Alice");
namesCollection.addName("Franck");
// prints ["Bob", "Alice", "Franck"]
console.log(namesCollection.getNames());
namesCollection.removeName("Alice");
// prints ["Bob", "Franck"]
console.log(namesCollection.getNames());
来源:我阅读了您提供的链接和其他一些链接。此模式用于简化代码的可读性 在下面的代码中,namesCollection有一个列表、3个函数和一个返回语句 无论何时调用nameCollection(),调用的三个函数和对象列表都不会使用,但返回语句正在运行 返回{ addName:addObject, removeName:removeObject, getNames:getObjects }; 每个值都与一个函数相关联 第一行:
namesCollection.addName(“Bob”)强> 当您运行这一行时,它将转到return语句,并看到有一个对addName的引用。引用导致addObject()的值为bob。addObject(object)的语法也可以是addObject(value)。在函数内部,它将“bob”值推送到对象列表中。对象现在是一个元素['Bob'] 有趣的是removeName或GetName不会被调用,因为您只调用了addName namesCollection.addName(“Alice”)
名称集合。地址名称(“法郎”)强> 这两者遵循相同的原则 现在对象是['Bob','Alice','Frankc'] console.log(namesCollection.getNames())强> 由于return语句中的getNames引用,此语句正在触发getObjects函数。它返回的是对象的值,因此当您在console.log()中给出该值时,它将打印列表 如果您对addName()或removeName()使用console.log(),它将不会打印任何内容,因为它不会打印任何内容。如果希望清楚地理解,请在函数中添加返回对象,并查看自己的输出 namesCollection.removeName(“Alice”)强> 仅触发值为Alice的removeObject()。正在搜索列表名“Alice”并将其从列表中删除 console.log(namesCollection.getNames())强> 现在这个语句将给出['Bob','Frankc']
通过使用这种模式,您不需要知道函数的实际名称,核心代码中的函数名称会让人难以理解,有时会毫无意义。因此,为了更好的可读性和理解,我们提供了一些简单的名称,例如addName、removeName、getNames(),而不是addObject、removeObject、getObjects。也许我回答得太晚了 但是我写了一篇教程,在那里我解释了它 你可以看一看,如果你有问题,仍然可以。请告诉我