创建命名空间对象 Javascript 单例 class
Create object of namespace Javascript singleton class
我是 IIFE 的新手,正在尝试在 Siungleton JavaScript 中实现命名空间 JavaScript class:
我有一个JavaScriptclass(比如说main
class):
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 命名空间 class:
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 是位于:
的对象
return {
getInstance: function() {
//method body
}
}
这段代码有很多问题,让我们试着运行从头开始:
var myIIFE = (function () {
....
})();
这导致myIIFE
是一个对象,准确的说是这个对象:
{
getInstance: function() {
if (!this.instance) {
this.instance = createInstance();
}
return this.instance;
}
}
那么,我假设,你会
myIIFE.getInstance()
它试图 return 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;
});
它应该可以工作。
总的来说,从您的代码看来,您似乎没有很好地掌握整个 "constructor function" 概念。我建议您查看以下链接,它们应该有所帮助。
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
我是 IIFE 的新手,正在尝试在 Siungleton JavaScript 中实现命名空间 JavaScript class:
我有一个JavaScriptclass(比如说main
class):
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 命名空间 class:
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 是位于:
return {
getInstance: function() {
//method body
}
}
这段代码有很多问题,让我们试着运行从头开始:
var myIIFE = (function () {
....
})();
这导致myIIFE
是一个对象,准确的说是这个对象:
{
getInstance: function() {
if (!this.instance) {
this.instance = createInstance();
}
return this.instance;
}
}
那么,我假设,你会
myIIFE.getInstance()
它试图 return 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;
});
它应该可以工作。
总的来说,从您的代码看来,您似乎没有很好地掌握整个 "constructor function" 概念。我建议您查看以下链接,它们应该有所帮助。
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