【问题标题】:javascript initialize object propertyjavascript初始化对象属性
【发布时间】:2013-10-28 20:04:27
【问题描述】:

这将是愚蠢的,但是......我一生都无法弄清楚如何初始化对象的所有方法。 比如

var obj = {
prop1: function() { ... },
prop2: function() { ... } //etc
}

不知道如何在不调用的情况下初始化它们 obj.prop1() 和 obj.prop2(),如果我知道 10 多个函数,这将变得乏味。 我也看过类似的东西,

var obj = new obj();

function obj() {
    this.init=function() { ... };
    this.init();
}

但是,据我所知,我必须再次独立地初始化每个。

【问题讨论】:

    标签: javascript object methods initializing


    【解决方案1】:

    我真的不明白为什么你需要为一个对象初始化 10 个不同的东西。

    一种方法是在一个 init 方法中隐藏所有调用,但您仍然需要从那里运行所有 10 个方法。

    另一种方法是将所有初始化方法命名为特殊的名称,例如__initMyCustomInit。 之后,您可以遍历对象的所有属性并使用正则表达式 ^__init.*$ 匹配 __init

    for (var prop in obj) {
      if (obj.hasOwnProperty(prop) && prop.match(/^__init.*$/)) {
        obj[prop]();
      }
    }
    

    【讨论】:

      【解决方案2】:

      我不确定我是否完全理解您想要什么,但这可以工作:

      var obj = {
      
      prop1: function() { return true; },
      prop2: function() { return false; }
      
      }
      //init
      for(var r in obj){
            obj[r](); // call!
      }
      

      或者作为你的 obj 的一部分:

      var obj = {
        prop1: function() { return true; },
        prop2: function() { return false; },
        init: function() {
           for(var r in this){
               //prevent calling your self...
               if (r!=='init'){
                 this[r]();
               }
           } 
        }   
      }
      
      obj.init();
      

      【讨论】:

      • 你在这里使用的这个初始化方法,你只用于像上面这样的单例对象吗?我假设当您不使用单例对象时,例如当您想要继承时,您将使用新语法,例如var obj = new MyObject();
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      相关资源
      最近更新 更多