2013-10-20 115 views
2

这将是愚蠢的,但...我为我的生活无法弄清楚如何初始化一个对象的所有方法。 例如javascript初始化对象属性

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

无法弄清楚如何初始化它们无需调用 obj.prop1()和obj.prop2(),这将是改变乏味,如果我有ya'know 10+功能。 我也看到这样,

var obj = new obj(); 

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

然而,据我所知道的,再说,我不得不独立初始化每一个。

回答

0

我不知道,如果我知道你想充分什么,但是这可能是工作:

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(); 
+0

这您使用此,您只使用单对象,如上面init方法的对象和匹配__init的所有属性?我假定当你不使用单例对象时,比如当你需要继承时,你可以使用新的语法,例如var obj = new MyObject(); – Donato

+0

@DanStayntouch是的,这是正确的。 – rene

1

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

这样做的一种方法是在单个init方法中隐藏所有的调用,但是您仍然必须从那里运行所有的10个方法。

另一种方法是命名所有初始化方法,如__initMyCustomInit。 之后,你可以在循环使用正则表达式^__init.*$

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