如何访问'这个'如果覆盖原型函数中的变量?

时间:2014-04-16 14:04:19

标签: javascript jquery

如果我以这种方式在我的构造函数中调用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);});

1 个答案:

答案 0 :(得分:1)

使用thisFunction.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));