Javascript:混合构造函数模式和揭示模块模式

Javascript: Mixing constructor pattern and Revealing Module Pattern

本文关键字:模式 模块 Javascript 混合 构造函数      更新时间:2023-09-26

是否有任何方法我可以做有一个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
    };
};

您可以使用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/上测试