gpt4 book ai didi

javascript - 如何通过模块模式制作子模块

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:27:34 24 4
gpt4 key购买 nike

我正在阅读有关 JavaScript 模块模式的内容。我的问题是如何用它制作子模块,即我如何继承它,比如我有这个类

    var MODULE = (function () { 
my = function(){
this.params = ""
},
privateVariable = 1;

my.prototype.moduleMethod = function () {
console.log("mod");
};

return my;
}());

如何使用从父类继承的属性创建它的子类?我怎样才能对模块模式做同样的事情?

最佳答案

模块模式不是类模式。你不能简单地假装你现在有 JavaScript 类。至于继承,如果你真的需要继承东西,你应该通过构造函数创建一个对象并使用原型(prototype)继承,虽然它有时执行起来比较慢。

至于创建子模块很简单

MODULE.submodule = (function(){
// another module stuff that can even reference MODULE
return { submodule: 'property' }
})();

现在,对于经典意义上的子类化,您可以在具有原型(prototype)的对象上模拟它,就像 Douglas Crockford 所做的那样 http://www.crockford.com/javascript/inheritance.html

为了用模块模拟它,您可以尝试在原始模块中创建一个密封/解封函数,并在您的子模块中使用它们。你可以在这里查看http://www.pallavlaskar.com/javascript-module-pattern-in-details/对于

克隆与继承

var MODULE_TWO = (function (old) {
var my = {},
key;

for (key in old) {
if (old.hasOwnProperty(key)) {
my[key] = old[key];
}
}

var super_moduleMethod = old.moduleMethod;
my.moduleMethod = function () {
// override method on the clone, access to super through super_moduleMethod
};

return my;
}(MODULE))

跨文件私有(private)状态

var MODULE = (function (my) {
var _private = my._private = my._private || {},
_seal = my._seal = my._seal || function () {
delete my._private;
delete my._seal;
delete my._unseal;
},
_unseal = my._unseal = my._unseal || function () {
my._private = _private;
my._seal = _seal;
my._unseal = _unseal;
};

// permanent access to _private, _seal, and _unseal

return my;
}(MODULE || {}));

关于javascript - 如何通过模块模式制作子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7508905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com