Объем этого ключевого слова в функции? - PullRequest
2 голосов
/ 26 августа 2010

Разве «this» в следующем коде все еще не относится к объекту DOM, выбранному селектором MooTools?

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

Ответы [ 5 ]

2 голосов
/ 27 августа 2010

Самый чистый способ справиться с этим таков:

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

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

в вышеприведенном 'this' get передается вызываемой функции.

Рабочий пример: http://jsfiddle.net/gT5dc/

2 голосов
/ 26 августа 2010

Вы должны сделать это способом 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).

0 голосов
/ 01 сентября 2010

В такой безумной ситуации я просто делаю:

$$ («бла»). AddEvent («клик», функция () { var self = this;

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

});

... конечно. в основном ни один из моих кодов не будет содержать click1 (); в конце. Такого рода внутренние функции, такие как click1, обычно используются для каких-то других целей. например,

var click1 = function () {self.addClass ('бла2'). } self.set ('tween', {onComplete: click1}). fade ('in');

0 голосов
/ 26 августа 2010

Вместо этого вам нужно будет сделать это, чтобы обратиться к нужному элементу:

click1.call(this);

В противном случае this относится к window внутри функции, рабочую версию вы можете увидеть здесь .

0 голосов
/ 26 августа 2010

Нет.click1() не связан ни с каким объектом (например, он не может вызываться как obj.click1()), поэтому в нем this относится к окну.

Однако вы можете сделать:

click1.call(this);

Метод call в основном устанавливает this в свой первый параметр.

...