在javascript中创建一个具有可选名称/值对的'init'方法的对象

Bla*_*man 2 javascript arrays initialization

我已经看到很多javascript对象都有一个'init'方法,你传入值来设置对象.

当在名称/值对数组中传递时,它们如何在内部处理其私有变量的初始化,如:

myObject.init({prop1:"blah",prop2:"asdf",...,propn:"n"});

具体来说,其中一些值可以是可选的,因此如果在init期间传入名称/值对,您将如何设置默认值然后覆盖它们.

Ale*_*yne 7

var myObject = {
  init: function(options) {
    this.foo = options.foo || 'some default';
    this.bar = options.requiredArg;

    if (!this.bar) raiseSomeError();
  }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

在 FF5、IE8、Chrome 12、Opera v11.5 上测试正常。默认值是什么并不重要,如果它们的密钥在调用列表中,它们将被覆盖,否则它们将被保留。

var myObject = {
   prop1: 'default1',
   prop2: 'default2',
   prop3: 'default3',
   prop4: 'default4',
   prop5: 'default5',
   prop6: 'default6',
   init: function(options) {
      for(key in options) {
         if(this.hasOwnProperty(key)) {
            this[key] = options[key]
         }
      }
   }
}

myObject.init( {prop1: "blah", prop2: "asdf", prop5: "n"} )
Run Code Online (Sandbox Code Playgroud)