如果我以这种方式在我的构造函数中调用set函数,this
变量将被覆盖,(就像我会以某种方式使用this.set.bind(object,index,element)
)
$.each($.parseJSON($selector.val()),this.set);
Set是一个原型函数:
Class.prototype.set = function(item,val){
//here I would like to get the real this in order to set data
this.data[item] = val;
}
有没有办法做到这一点?
我已经通过这种方式管理它,但我想知道第一个是否存在任何技巧。
var o = $.parseJSON($selector.val();
for(var i in o)
this.set(i,o[i]); //this works
UPDETE: 这些也有效:
$.each($.parseJSON($selector.val()),(function(i,e){this.set(i,e);}).bind(this));
或
var self = this;
$.each($.parseJSON($selector.val()),function(i,e){self.set(i,e);});
答案 0 :(得分:1)
this
或Function.call()
可能会覆盖 Function.apply()
。
要保持原创,您需要Function.bind()
本机或使用某些填充。
试试这个:
$.each($.parseJSON($selector.val()),this.set.bind(this));
更新:这种做法怎么样?
var that = this;
$.each($.parseJSON($selector.val()), function() { return that.set.apply( that, arguments ); } );
典型的bind()与此类似:
function myBind(func,ctx) {
return function() {
return func.apply(ctx,arguments);
};
}
这可能会再次用于简化上面的第二个例子:
$.each($.parseJSON($selector.val()),myBind(this.set, this));