2012-12-22 177 views
2

有沒有什麼辦法可以做一個Javascript類來擴展通過揭示模塊模式創建的對象?我嘗試了下面的代碼,但是爲了達到同樣的目的,還在那裏嗎?Javascript:混合構造函數模式和揭示模塊模式

sv.MergeQuestionViewModel = function() { 
    this = sv.QuestionDetailViewModal(); 
    this.init($("#mergeQuestionModel")); 
}; 

sv.QuestionDetailViewModal = function() { 
    var $el, 
     self = this, 
     _question = ko.observable(), 
     _status = new sv.Status(); 

    var _init = function (el) { 
     $el = el; 
     $el.modal({ 
      show: false, 
      backdrop: "static" 
     }); 
    }; 

    var _show = function() { 
     $el.modal('show'); 
    }; 

    var _render = function (item) { 
     _question(new sv.QuestionViewModel(item)); 
     _show(); 
    }; 

    var _reset = function() { 
     _question(null); 
     _status.clear(); 
    }; 

    var _close = function() { 
     $el.modal('hide'); 
     _reset(); 
    }; 

    return { 
     init: _init, 
     show: _show, 
     render: _render, 
     reset: _reset, 
     close: _close 
    }; 
}; 
+0

可能重複[如何實現在JS揭示原型模式的繼承?(http://stackoverflow.com/questions/9248655/how-to-implement-inheritance- in-js-revealing-prototype-pattern) – Bergi

+0

爲了什麼目的,你在代碼中使用'this'關鍵字? – Bergi

回答

2

您可以使用jQuery.extend來實現此行爲。

sv.MergeQuestionViewModel = function() { 
    $.extend(this, sv.QuestionDetailViewModal); 

    this.init($("#mergeQuestionModel")); 
}; 

sv.QuestionDetailViewModal = (function() { 
var el, 

_init = function($el) { 
    el = $el; 
    console.log('init', el); 
}, 

_render = function() { 
    console.log('render', el); 
}; 

return { 
    init : _init, 
    render : _render 
}; 
}()); 

var view = new sv.MergeQuestionViewModel(); 
view.render(); 

測試它http://jsfiddle.net/GEGNM/

+0

當然,我意識到代碼不起作用,但我也想證明我要去做什麼。我的問題是有另一種方法來實現這一點。謝謝! – Abe

+0

我99.9%確定你知道,但我只是想保證。我已經更新了我的答案。 – nekman