我一直在尝试编写扩展函数,因此我可以在我的应用程序中设置一堆设置,用户可以通过将选项对象传递给构造函数来覆盖这些设置。
我需要类似下面的东西......但是这段代码的问题是对象没有长度属性(这可能不是下面代码唯一的错误)。
有什么想法吗?你是如何实现这一点的。我有一个很好的谷歌,看看jQuery源代码,但我无法弄清楚它是如何工作的:
extend : function() {
for(var i = 0; i < options.length; ++ i) {
if(options[i] in this.settings) {
this.settings[options[i]] = options[i];
}
}
}
答案 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语句访问继承的属性。