函数中THIS关键字的范围?

时间:2010-08-26 03:09:12

标签: javascript dom function mootools this

以下代码中的'this'是否仍然不能引用MooTools选择器选择的DOM对象?

$$('div').addEvent('click', function()
{
    var click1 = function(){$(this).setStyle('background', 'red');}
    click1();
});

5 个答案:

答案 0 :(得分:2)

你应该采用MooTools方式 - 将this绑定到click1函数 - http://jsfiddle.net/oskar/7EArh/5/

$$('div').addEvent('click', function() {
    var click1 = function() {
        this.setStyle('background', 'red');
    }.bind(this);
    click1();
});​

此外,this已经使用MooTools方法进行了扩展,因此无需执行$(this)

答案 1 :(得分:2)

处理它的最简洁方法是:

var click1 = function() {
    this.setStyle('background', 'red');
};

$$('div').addEvent('click', click1);

在上面,'this'get被传递给名为。

的函数

工作示例: http://jsfiddle.net/gT5dc/

答案 2 :(得分:0)

没有。 click1()与任何对象都没有关联(例如,obj.click1()不可调用),因此this指的是窗口。

但是,你可以这样做:

click1.call(this);

call方法基本上将this设置为其第一个参数。

答案 3 :(得分:0)

您需要这样做才能引用您想要的元素:

click1.call(this);

否则this引用函数you can see the working version here内的window

答案 4 :(得分:0)

在这种疯狂的情况下,我只是这样做:

$$('blah')。addEvent('click',function(){     var self = this;

var click1 = function(){ self.setStyle(....); }
click1();

});

......当然。我的代码中没有一个会包含click1();在末尾。像click1这样的内部函数通常用于其他目的。例如。

var click1 = function(){self.addClass('blah2')。removeClass('blah'); } self.set('tween',{onComplete:click1})。fade('in');

相关问题