我正在尝试在对象中设置一些属性。我不喜欢告诉对象从外面可以期待什么(使对象更灵活,imo),所以我尝试了这个,没有成功:
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;
},
};
认为很清楚缺少什么。
有什么想法吗?干杯!
更新
var data = {
options : [
{
interval : 8000,
target : '#slider img',
},
],
images : [
{
img : 'assets/img/assets/img/slider_test_img.png',
title : 'Uniforme de Restauração 1',
description : 'blablabla descricao',
url : 'http://www.google.pt',
},
{
img : 'assets/img/assets/img/slider_test_img.png',
title : 'Uniforme de Restauração 2',
description : 'blablabla descricao 2',
url : 'http://www.google.pt',
},
{
img : 'assets/img/assets/img/slider_test_img.png',
title : 'Uniforme de Restauração 3',
description : 'blablabla descricao 3',
url : 'http://www.google.pt',
},
],
}
答案 0 :(得分:6)
您必须引用this
:
var self = this;
$.each(data, function(index, value) {
self[index] = value;
});
或使用jQuery的jQuery.proxy
方法:
$.each(data, $.proxy(function(index, value) {
this[index] = value;
}, this));
否则,this
会引用value
,如documentation中所述。
答案 1 :(得分:2)
直接引用该对象:
$.each(data,
function(index, value) {
// v------direct reference
slideshow[index] = value;
}
);
或不使用$.each()
,只使用for-in
循环作为对象,或for
作为数组,因为这不会改变{{1} } value:
this
或者您可以使用jQuery.proxy()
[docs]方法在 // I don't know if data is an Array or an object
for( var n in data ) {
this[ n ] = data[ n ];
}
处理程序中建立this
值。
$.each()
答案 2 :(得分:1)
问题是,在传递给each
的函数内部,this
不再引用slideshow
,而是引用当前迭代的value
。你需要在进入每个循环之前存储幻灯片的引用:
slideshow = {
init : function(data) {
if (!data)
return false;
var that = this;
$.each(data,
function(index, value) {
that[index] = value;
}
);
},
};