jQuery" Class"麻烦 - "出乎意料的是这个"

时间:2014-08-15 00:55:01

标签: javascript jquery class

我目前正在使用类的脚本:http://digg.googlecode.com/files/Class-0.0.2.js

我已经加载了最新版本的jQuery。

这是我的代码。

var Deck = Class.create({
    init: function() {
        var this.list = [];
    },
    console: function() {
        console.log(this.list);
    },
    addCards: function (elemone, elemtwo, elemthree) {
        $(elemone).each(function(i, el) {
        var values = $(elemtwo, this).text();
        if ($(elemthree, this).text() == "2") {
            this.list.push(values);
        }
            this.list.push(values);
        });
    }
});

我只是通过加载上面的代码得到错误“Unexpected token this”。

预期的行为是使用此

创建一个对象
var deck = new Deck();

然后添加addCards找到的卡片列表

deck.addCards(elements, go, here);

最后使用deck.listthis.list的函数访问它(后者我相信会导致错误)。将var this.list更改为仅this.list会导致另一个错误 - Cannot read property 'push' of undefined

2 个答案:

答案 0 :(得分:2)

var this.list = [];是问题this.list = [];会做的......

this.list不是变量,此处listthis引用的对象的属性,因此无需使用var

每个循环中都存在上下文问题,所以

var Deck = Class.create({
    init: function () {
        this.list = [];
    },
    console: function () {
        console.log(this.list);
    },
    addCards: function (elemone, elemtwo, elemthree) {
        var self = this;
        $(elemone).each(function (i, el) {
            //here this referrs to the current element being iterated on, not the Deck object so use a closure variable
            var values = $(elemtwo, this).text();
            if ($(elemthree, this).text() == "2") {
                self.list.push(values);
            }
            self.list.push(values);
        });
    }
});

答案 1 :(得分:1)

您在var前面不需要this.list - 您正在为现有对象分配属性,而不是创建新对象。