创建命名空间 Javascript 单例类的对象
Create object of namespace Javascript singleton class
我是IIFE的新手,并试图在Siungleton JavaScript类上实现JavaScript中的命名空间:
我有一个JavaScript类(比如main
类):
var myIIFE = (function () {
var x = null;
//constructor function
var myIIFE = function() {
var a = new IIFE.InsideIIFE(); //says not a constructor
}
myIIFE.prototype = {
//some methods
}
function createIstance() {
return new myIIFE();
}
return {
getInstance: function() {
if (!this.instance) {
this.instance = createInstance();
}
return this.instance;
}
};
})();
然后我有另一个JavaScript命名空间类:
myIIFE.InsideIIFE = (function() {
var inside = function() {}
inside.prototype = { //some methods }
return inside;
});
我想在 myIIFE
中创建一个myIIFE.InsideIIFE
的对象,这给我抛出了一个错误:
myIIFE.InsideIIFE is not a constructor
我做错了什么吗?或者,如果这是一种正确的方法,那么我应该做出哪些更改。
我尝试使用new this.InsideIIFE()
,只是InsideIIFE
,但没有一个有效。
编辑:
从我的分析中,我了解到myIIFE
(父级)是一个对象,因为它在以下位置返回一个对象:
return {
getInstance: function() {
//method body
}
}
这段代码有很多问题,让我们从一开始就尝试在脑海中运行它:
var myIIFE = (function () {
....
})();
这导致myIIFE
是一个对象,准确地说,这个对象:
{
getInstance: function() {
if (!this.instance) {
this.instance = createInstance();
}
return this.instance;
}
}
所以,那么我假设,你这样做
myIIFE.getInstance()
哪个试图返回new myIIFE();
它遇到myIIFE()
并尝试这样做:
new IIFE.InsideIIFE();
我假设你的意思是写
new myIIFE.InsideIIFE();
因为IIFE
没有在您提供的代码中的任何位置定义它。
让我们看看什么是myIIFE.insideIIFE
var myIIFE.InsideIIFE = (function() {
var inside = function() {}
inside.prototype = { //some methods }
return inside;
});
首先,您从 var
开始,这是错误的,因为myIIFE
已经定义,并且您只是向其添加了一个新属性。 所以它应该很简单
myIIFE.InsideIIFE = (function() {
var inside = function() {}
inside.prototype = { //some methods }
return inside;
});
它应该有效。
一般来说,从你的代码来看,你似乎没有很好地掌握整个"构造函数"的概念。我建议您查看以下链接,它们应该会有所帮助。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript
- 在什么情况下我们需要在javsacript中实现单例类
- 如何将一个单例传递给另一个对象,使该对象的所有实例都引用同一个单实例
- 使用Ext.Ajax.request使ExtJS单例返回对象
- 创建命名空间 Javascript 单例类的对象
- JavaScript 对象的单例行为
- 如何在 chrome 开发者控制台中查看在 DOJO 中创建的单例对象
- Javascript 文字对象和单例模式
- Javascript/NodeJS是创建单例对象的最佳方式
- 如何使用Gulp和Babelify (Babel + Browserify)编译单例和类
- 在CoffeeScript中为我的单例类定义属性getter
- 通过对象字面量的单例与模块模式的对比,代码组织的利弊
- 如何在javascript中基于参数创建对象的单例实例
- 单例对象最有效的Aurelia绑定方式
- 从ES6模块导出单例类的利弊
- 这种创建对象的方法是否只适用于单例对象?
- 为什么使用带参数的构造函数的单例对象instanceof返回false ?
- 在javascript中相互访问单例类和内部类
- 每个字符串的javascript单例对象
- 在JavaScript中为Google闭包编译器注释单例对象,或者“危险地使用全局this对象”.警告
- 使用RequireJS,我如何传递全局对象或单例