立即调用对象文字

时间:2017-02-16 16:59:04

标签: javascript object design-patterns module

这段代码有什么作用?它的实际用途是什么?我没有写这段代码。我在这里找到了它:https://gist.github.com/anonymous/7407896

!{
    //convenience methods here for create and expose via this
    create: function(options){
        //constructor logic here
        var created = Object.create(this.fn);
        var args = [].slice.call(arguments);
        this.plugins.forEach(function(plugin){
            plugin.apply(created, args);
        });
        return created;
    },
    fn:{//prototype methods here

    },
    expose:function(NameSpace, window, document, plugins){
        window[NameSpace] = this;//This can be tweaked for whatever
        this.document = document;
        this.plugins = plugins;
    }
}.expose("LibraryNamespace", window, document, []);

我很想知道上面的内容是什么比做一个像揭示模块模式更好的事情。另外我不清楚create函数的机制。有人可以引导我完成基于传入的原型创建对象的过程吗?

var libraryNameSpace= window.libraryNameSpace || {};
libraryNameSpace.myFeatureOne = (function(){
    var _bar = "_bar";
    var foo = "foo" + _bar;
    function foobar(){ return "foobar"; }
    return {
        myFoo : foo;
        fooBarMethod: foobar;
    };
})();

1 个答案:

答案 0 :(得分:1)

第一个代码块以返回具有三个函数的对象开始,然后调用expose函数,该函数是根据它的参数返回对象的构造函数。 expose函数将使用NameSpace将此对象添加到window对象。 看起来这个代码在将库放到window对象时可能很有用。

在第二个代码块中,您将变量名称libraryNameSpace声明为window.libraryNameSpace或空对象。由于此时window.libraryNameSpace可能未定义。它会将变量设置为object。然后你在这个对象上添加一个自调用函数。

主要区别在于你如何处理对象。 {},Object.create,new ConstructorFunc()和mutability

之间存在差异