如何实现这个扩展设置功能

时间:2010-08-12 08:09:27

标签: javascript

我一直在尝试编写扩展函数,因此我可以在我的应用程序中设置一堆设置,用户可以通过将选项对象传递给构造函数来覆盖这些设置。

我需要类似下面的东西......但是这段代码的问题是对象没有长度属性(这可能不是下面代码唯一的错误)。

有什么想法吗?你是如何实现这一点的。我有一个很好的谷歌,看看jQuery源代码,但我无法弄清楚它是如何工作的:

extend : function() {
    for(var i = 0; i < options.length; ++ i) {
        if(options[i] in this.settings) {
            this.settings[options[i]] = options[i];
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您应枚举对象属性,您可以将for-in语句用于此目的,例如:

var obj = {
  // ...
  extend : function(options) {
    for(var i in options) {
      if (options.hasOwnProperty(i)) {
        this.settings[i] = options[i];
      }
    }
  },
  settings: {foo:1}
  //...
};

obj.extend({ bar: 2});
obj.settings; // {foo:1, bar:2}

hasOwnProperty方法用于检查枚举属性是否物理存在于对象中,因为for-in can语句访问继承的属性。