2014-09-06 90 views
1

我有以下的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不是函数”。它似乎不知道我在原型中声明的渲染函数。我在这里错过了什么?感谢帮助。

+4

'回调({},这一点);''的是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

+0

谢谢,你是完全正确。我改变了我的构造函数。 – Hinrich 2014-09-06 12:34:20

回答

1

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指出的,我取代用于与“完成”回调函数空错误的空对象

+1

如果您使用的回调方式与NodeJS相同,您应该执行'callback(null,playlist);'。这样回调可以更容易地检查是否有错误。 – Volune 2014-09-06 12:52:29

+0

感谢您指出这一点。我改变了代码 – Hinrich 2014-09-07 20:34:53