2014-09-06 136 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

相關問題