【问题标题】:How can i make this object pattern work?我怎样才能使这个对象模式工作?
【发布时间】:2014-05-26 17:40:54
【问题描述】:

这种模式真的很适合我,但我怎样才能让它充当一个基类而不使用'new'、'this'或'Object.create()'?有可能吗?

var myObj = (function () {

    var x = 0;
    var privFunc = function() { console.log(x); };

    // interface
    return { 
        init    : function (arg) { x=arg; },
        getVal  : privFunc
    };

}());

var abc = myObj;
abc.init(123);
abc.getVal(); //123

var xyz = myObj;
xyz.init(456);
xyz.getVal(); //456

abc.getVal(); //456? want it to return 123

【问题讨论】:

  • 如果你想让它返回123,那么不要在init函数中改变它的值。但是,除非您对 x 有其他用途,否则该模式根本没有意义。

标签: javascript module iife


【解决方案1】:

您正在创建一个对象,然后您只需复制对它的引用。如果你想要单独的对象,你需要为每个对象调用一次函数:

function myObj() {

    var x = 0;
    var privFunc = function() { console.log(x); };

    // interface
    return { 
        init    : function (arg) { x=arg; },
        getVal  : privFunc
    };

}

var abc = myObj();
abc.init(123);
abc.getVal(); //123

var xyz = myObj();
xyz.init(456);
xyz.getVal(); //456

abc.getVal(); //123

【讨论】:

  • 非常感谢;进一步阅读,似乎我正在创建一个更容易使用的工厂函数。我不太热衷于“this”和“new”关键字,并且想将我的模块编写为对象。在我开始一个大型项目之前,我试图确定一个一致的模式 - 这是令人困惑的东西。
猜你喜欢
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多