gpt4 book ai didi

javascript - 这种嵌套命名空间继承模式是否得到了很好的实现?

转载 作者:行者123 更新时间:2023-12-02 15:07:49 25 4
gpt4 key购买 nike

我正在尝试使用对象以及从这些对象继承的对象来实现一些嵌套 namespace 。我想知道第一种方法是否得到了很好的实现:

// Namespaces
var firstDomain = {};
firstDomain.firstSubDomain = {};
firstDomain.firstSubDomain.secondSubDomain = {}

/*
* Base Object
*/
firstDomain.firstSubDomain.secondSubDomain.baseObject = (function(baseObject) {
baseObject.init = function() {};

return {
init: baseObject.init
}

})(firstDomain.firstSubDomain.secondSubDomain.baseObject || (firstDomain.firstSubDomain.secondSubDomain.baseObject = {}));

/*
* Extended Object
*/
firstDomain.firstSubDomain.secondSubDomain.extendedObject = (function(extendedObject) {
extendedObject.init = function() {};
extendedObject.init.prototype = Object.create(firstDomain.firstSubDomain.secondSubDomain.baseObject.init.prototype);
extendedObject.init.prototype.extraFunction = function() {};

return {
init: extendedObject.init
}

})(firstDomain.firstSubDomain.secondSubDomain.extendedObject || (firstDomain.firstSubDomain.secondSubDomain.extendedObject = {}))

// Objects instances

// Base object instance
var baseObject = new firstDomain.firstSubDomain.secondSubDomain.baseObject.init();

// Extended object instance and executing particular method
var extendedObject = new firstDomain.firstSubDomain.secondSubDomain.extendedObject.init();
extendedObject.extraFunction();

console.log(firstDomain);

这是存储库链接:

https://github.com/termosfera/JS_Design_Patterns/blob/master/namespace_subclassing/nested_namespaced_subclassing.js

最佳答案

这听起来像是两个问题合二为一,因为命名空间和子类化是两个不同的东西。

…baseObject = (function(baseObject) {
baseObject.… = …

return {
…: baseObject.…
}

})(…baseObject || (…baseObject = {}));

不,那是不正确的。您在此处将显示模块模式与装饰模块1 模式混合在一起。你应该这样做

….baseObject = (function() {
return {
…: …
};
})();

(function(baseObject) {
baseObject.… = …;
})(….baseObject || (….baseObject = {}));

1:我实际上不知道第二个模式叫什么

… = function() {};
….prototype = Object.create(other….prototype);
….prototype.extraFunction = function() {};

没关系,您从原型(prototype)的继承是正确的。但是,您可能想在构造函数中进行 super 调用。

new ….baseObject.init();
new ….extendedObject.init();

不过这很奇怪。没有理由将构造函数命名为“init”。构造函数也应该大写。应该是这样的

new ….BaseObject();
new ….ExtendedObject();

关于javascript - 这种嵌套命名空间继承模式是否得到了很好的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997853/

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