2010-08-12 40 views
1

我一直在试图编写一个扩展函数,这样我可以在我的应用程序中有一堆设置,可以由用户通过将选项对象传递给构造函数来覆盖。如何实现这个扩展设置功能

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

任何想法?你如何实现这一点。我有一个很好的谷歌和看看jQuery的源代码,但我不明白它是如何工作的:

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

回答

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可以访问声明继承属性。

+0

感谢CMS,太棒了。我从中学到了很多东西。 – 2010-08-12 08:42:03