从prototype方法更改实例属性

时间:2015-01-30 14:06:56

标签: javascript class oop methods prototype

我正在尝试使用原型方法构建一个可重用的Database类,以便将项添加到类的list数组属性中:

    var Database = function() {
        this.list = [];
    }

    Database.prototype = {
        getBooks: function () {
            $.get("//some.url/books")
            .success(function(res) {
                _.each(res,function(book) {
                    this.list.push({
                        name: book.name,
                        url: book.url,
                        type: "book"
                    })
                })
            });
        }
    }

但是,目前我收到一条警告,说我无法推送到未定义的属性list,我只能假设我实际上并没有.push任何Database类实例属性,而是原型属性。

所以,问题重申:如何使用原型方法更改实例的属性?

2 个答案:

答案 0 :(得分:1)

您可以在变量中存储对this的引用,例如

 Database.prototype = {
        getBooks: function () {
           var _this = this;
            $.get("//some.url/books")
            .success(function(res) {
                _.each(res,function(book) {
                    _this.list.push({
                        name: book.name,
                        url: book.url,
                        type: "book"
                    })
                })
            });
        }
    }

答案 1 :(得分:0)

“这个”指的是什么,取决于具体情况。查看mdn以获取更多详细信息:MDN this operator

此线程可以帮助您清楚地了解如何将“this”传递到另一个范围:Stackoverflow thread