很抱歉,如果之前已經詢問過這個問題,但經過大量搜索後,我似乎無法找到明確解決我的情況的答案。Javascript繼承:從超類的方法設置子類的屬性
我有一個超類,我們將調用窗體,它有一些通用的方法。我只關注兩種特定的方法。 show_form()
顯示錶格,load_token()
從服務器獲取令牌。
形式
function Form() {
// Event handler for form submission
this.submit_button.bind('click', jQuery.proxy(function(){
this.submit();
}, this));
}
Form.prototype.show_form = function() {
// Some other stuff happens here, but this is the relevant part.
// We load the token
this.load_token();
}
Form.prototype.load_token = function(){
// Contains a synchronous ajax request that fetches the token from the server
// and sets it. So we end up with
this.token = 'some-token';
};
然後,我有一個子類叫做EmailForm,從表繼承。我還爲這個類定義了一個自定義的submit()
方法,該方法由Form()
的構造函數中的事件處理函數調用。所以,我有:
EmailForm
function EmailForm() {};
EmailForm.prototype = new Form();
EmailForm.prototype.submit = function() {
console.log(this.token); // Returns undefined
};
最後,這裏是這一切是如何走到一起
$('#email_form_link').bind('click', function(){
var email_form = new EmailForm();
email_form.show_form();
});
問題
所以我需要的令牌向服務器發出請求。由於有幾種形式需要使用load_token()
方法,所以我在超類中定義它,並讓子類繼承它。由於我打電話email_form.show_form()
,我預計email_form
的token
屬性會被設置,但這似乎並不是這樣。
那麼我怎樣才能調用一個從超類繼承的方法,並讓它改變調用它的子類的屬性呢?
你肯定根本問題」不是個t與異步操作不是c在代碼檢查結果(令牌被設置)之前完成? – Pointy
對不起,忘了提。這實際上是一個同步請求。 –
好的,你怎麼知道'.show_form()'在「submit」函數運行之前被調用?你知道(通過'console.log()'或其他什麼)'.load_token()'發生? – Pointy