从原型方法更改实例 属性
Change instance property from prototype method
我正在尝试构建一个可重复使用的 Database
class,使用原型方法将项目添加到 class 的 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
ing 到任何 Database
class实例属性,而是原型属性.
因此,问题重述:如何使用原型方法更改实例的属性?
您可以在变量中存储对 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"
})
})
});
}
}
"this"指的是什么,视情况而定。检查 mdn 以获取更多详细信息:MDN this operator
并且这个线程可以帮助您清楚地了解如何将 "this" 传递给另一个范围:Whosebug thread
我正在尝试构建一个可重复使用的 Database
class,使用原型方法将项目添加到 class 的 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
ing 到任何 Database
class实例属性,而是原型属性.
因此,问题重述:如何使用原型方法更改实例的属性?
您可以在变量中存储对 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"
})
})
});
}
}
"this"指的是什么,视情况而定。检查 mdn 以获取更多详细信息:MDN this operator
并且这个线程可以帮助您清楚地了解如何将 "this" 传递给另一个范围:Whosebug thread