Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript设计模式揭示了模块模式是如何工作的?_Javascript_Design Patterns_Revealing Module Pattern - Fatal编程技术网

javascript设计模式揭示了模块模式是如何工作的?

javascript设计模式揭示了模块模式是如何工作的?,javascript,design-patterns,revealing-module-pattern,Javascript,Design Patterns,Revealing Module Pattern,我目前正在学习javascript和设计模式,我读了这段我不理解的代码。 为什么以及如何访问返回对象?? 我知道这是函数中被调用的函数;我了解范围(我想我了解范围,但显然不了解)。。 在这里,我很困惑为什么我们可以访问返回对象内部的内容,而不能访问其余的内容..为什么返回对象是公共的 你能给我解释一下吗,或者给我一个链接 (英语不是我的第一语言,这是我在这里的第一个问题,如果我违反了规则,请道歉) 守则: // we write the entire object logic as privat

我目前正在学习javascript和设计模式,我读了这段我不理解的代码。 为什么以及如何访问返回对象?? 我知道这是函数中被调用的函数;我了解范围(我想我了解范围,但显然不了解)。。 在这里,我很困惑为什么我们可以访问返回对象内部的内容,而不能访问其余的内容..为什么返回对象是公共的

你能给我解释一下吗,或者给我一个链接

(英语不是我的第一语言,这是我在这里的第一个问题,如果我违反了规则,请道歉)

守则:

// 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。

也许我回答得太晚了

但是我写了一篇教程,在那里我解释了它

你可以看一看,如果你有问题,仍然可以。请告诉我