Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-通过引用定义对象属性名称_Javascript_Jquery_Oop - Fatal编程技术网

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;
            }
        );
    },
};