未定义的函数调用JavaScript的原型方法时
问题描述:
我有以下的JavaScript对象:未定义的函数调用JavaScript的原型方法时
var Playlist = function(callback) {
$.ajax({
url:'/playlist'
})
.done(function(data) {
this.html = data;
callback({},this);
})
.fail(function(err) {
callback(err,{});
});
};
这个对象,我宣布一个原型方法:
Playlist.prototype = {
render : function() {
$('#main').html(this.html);
}
};
现在,当我创建一个新的对象UND尝试像这样调用“渲染”功能
function renderPlaylist() {
var playlist = new Playlist(function(err, obj) {
obj.render();
});
}
renderPlaylist();
我得到'undefined不是函数”。它似乎不知道我在原型中声明的渲染函数。我在这里错过了什么?感谢帮助。
答
与Volune的帮助下,我改变了我的构造函数
var Playlist = function(callback) {
var playlist = this;
$.ajax({
url:'/mpdplaylist'
})
.done(function(data) {
playlist.html = data;
callback(null,playlist);
})
.fail(function(err) {
callback(err,{});
});
};
现在它的工作原理。谢谢!!
编辑: 作为Volune指出的,我取代用于与“完成”回调函数空错误的空对象
'回调({},这一点);''的是this'不你怎么看。请参阅[JavaScript“this”关键字](http://stackoverflow.com/questions/3127429/javascript-this-keyword),[MDN'this'文档](https://developer.mozilla.org/en-US/ docs/Web/JavaScript/Reference/Operators/this)和[JavaScript封闭如何工作?](http://stackoverflow.com/questions/111102/how-do-javascript-closures-work) – Volune 2014-09-06 12:30:59
谢谢,你是完全正确。我改变了我的构造函数。 – Hinrich 2014-09-06 12:34:20