Javascript-通过引用定义对象属性名称
我试图在对象内部设置一些属性。我希望不必告诉对象从外部期待什么,使对象更灵活,因此我尝试了这个,但没有成功:Javascript-通过引用定义对象属性名称,javascript,jquery,oop,Javascript,Jquery,Oop,我试图在对象内部设置一些属性。我希望不必告诉对象从外部期待什么,使对象更灵活,因此我尝试了这个,但没有成功: slideshow = { init : function(data) { if (!data) return false; $.each(data, function(index, value) { // this isn't working, and don't
slideshow = {
init : function(data) {
if (!data)
return false;
$.each(data,
function(index, value) {
// this isn't working, and don't know how to
this[index] = value;
}
);
alert(this.options.interval);
return true;
},
};
我觉得很清楚遗漏了什么
有什么想法吗?干杯
更新
您必须保留对以下内容的引用: 或者使用jQuery的方法:
否则,这将引用值,如中所述。或者直接引用对象:
$.each(data,
function(index, value) {
// v------direct reference
slideshow[index] = value;
}
);
或者不使用$.each,只对对象使用for in循环,或对数组使用for,因为这不会更改此值:
或者,您可以使用该方法在$.each处理程序中建立this值
问题在于,在传递给每个人的函数中,这不再是指幻灯片,而是指当前迭代的值。在进入每个循环之前,您需要存储对幻灯片放映的引用:
slideshow = {
init : function(data) {
if (!data)
return false;
var that = this;
$.each(data,
function(index, value) {
that[index] = value;
}
);
},
};
如果可能的话,你可能想考虑设置合理的默认值,这样用户就可以通过一组最小的参数。@ EndoPHAGE我理解你的意思,并且愿意,但是我也希望能自由地通过用数据对象传递新函数来快速更新对象。任何默认值都应该被用户可以传递的参数覆盖。谢谢,我所需要的一切和一些额外有用的信息:干杯!只有一件事,传入“数据”的对象作为数组而不是常规对象属性附加到当前对象。有什么想法吗?找到了一种使用eval的方法,但不确定它是否明智。@yoda:我得看看要知道什么数据。你能举一个数据是什么样的例子吗。。。不,eval几乎肯定不是解决方案。Nevermind@patrick dw发现我的问题只是缺乏关注:
$.each(data, $.proxy(function(index, value) {
this[index] = value;
}, this));
$.each(data,
function(index, value) {
// v------direct reference
slideshow[index] = value;
}
);
// I don't know if data is an Array or an object
for( var n in data ) {
this[ n ] = data[ n ];
}
$.each(data,
$.proxy( function(index, value) {
this[index] = value;
}, this )
);
slideshow = {
init : function(data) {
if (!data)
return false;
var that = this;
$.each(data,
function(index, value) {
that[index] = value;
}
);
},
};