如何在Javascript中使用“this”

时间:2011-11-03 10:39:24

标签: javascript mootools this

我有这段代码:

this.json.each(function(obj, index) {
    var li = new Element('li');
    var a = new Element('a', {
        'href': '#',
        'rel': obj.id,
        events: {
            'click': function(e) {

                this.doSteps(this.step + 1); // <-- causing issue

            }
        }   
    });
    var img = new Element('img', {
        'src': imgd + obj.img,
        'alt': obj.name                        
    });
    img.inject(a);
    a.inject(li);
    li.inject(ul);
});

我在控制台中收到“this.doSteps不是函数”的错误。有人可以帮我解决这个问题。

提前致谢。

5 个答案:

答案 0 :(得分:3)

您需要绑定this,因此该函数的范围是指右this

'click': function(e) {
    this.doSteps(this.step + 1);
}.bind(this)

这是MooTools的方式。

答案 1 :(得分:1)

尝试在闭包中捕获它:

var li = new Element('li');
var _self = this;
var a = new Element('a', {
    'href': '#',
    'rel': obj.id,
    events: {
        'click': function(e) {

            _self.doSteps(_self.step + 1); // <-- causing issue

        }
    }   
});

答案 2 :(得分:0)

导致问题的行this引用该函数所属的对象,即events,它确实没有任何名为doSteps的成员。

答案 3 :(得分:0)

您可以使用此函数在每个函数中传递此内容。

this.json.each(function(obj, index) {


    }, this);

答案 4 :(得分:-1)

尝试使用e您当前正在处理的元素

this.json.each(function(obj, index) {
    var li = new Element('li');
    var a = new Element('a', {
        'href': '#',
        'rel': obj.id,
        events: {
            'click': function(e) {

                e.doSteps(e.step + 1); // <-- here the e from the function is your element

            }
        }   
    });
    var img = new Element('img', {
        'src': imgd + obj.img,
        'alt': obj.name                        
    });
    img.inject(a);
    a.inject(li);
    li.inject(ul);
});