模块模式中的构造函数
Constructors in the Module Pattern
在javascript中使用模块模式时,如果有的话,应该如何定义构造函数。我希望我的构造函数适合标准模块模式,而不是全局的。
为什么像这样的东西不起作用,它是完整的、完全胡说八道的吗?
var HOUSE = function() {
return {
Person: function() {
var self = this;
self.name = "john";
function name() {
return self.name;
}
}
};
}();
var me = new HOUSE.Person();
alert(me.name());
您的代码几乎很好。然而,函数name()
不是公共的,但变量是公共的,因此您试图执行该变量时会导致错误。将函数getName
添加到对象上,并调用它:
var HOUSE = function() {
return {
Person: function() {
var self = this;
self.name = "john";
self.getName = function() {
return self.name;
}
}
};
}();
var me = new HOUSE.Person();
alert(me.getName());
http://jsfiddle.net/8nSbP/
使用var
和function foo() {}
(后者作为声明,意思是"仅"function foo() {}
而不分配它)创建本地符号。因此,该函数在构造函数之外不可用。
无论您想公开(公开)什么,都应该分配给this
(或者self
,因为您定义了self = this
):
self.getName = function() {
return self.name;
};
注意,您已经使用了name
,所以我给函数起了另一个名字。如果您想使name
字符串成为本地字符串,并公开函数,那么它们可以具有相同的名称,因为没有冲突。例如:
var name = "john";
self.name = function() {
return name;
};
您需要拿出该方法,并将其附加到Person原型。但是当你这样做的时候,你会有一个name属性和一个name方法,这是不起作用的,所以考虑重命名后一个
HOUSE.Person.prototype.getName = function(){
return this.name;
}
或者,您可以将它附加到this
,并使getName成为一个特权方法:
Person: function() {
this.name = "john";
this.getName = function() {
return this.name;
}
}
相关文章:
- JavaScript模块模式-如何在使用对象/函数之前激发构造函数/init函数
- 日志记录时避免 Promise 构造函数反模式
- 用于初始化对象的编码模式 - 构造函数(新)与 Object.create()(Crockford)
- 如何在 Crockford 的新构造函数模式中共享“构造函数”功能
- 构造函数模式和原型模式之间的区别
- 使用构造函数显示模块模式
- IIFE创建模式-但如何支持构造函数参数
- json模式的构造函数
- AngularJS设计模式:我应该使用工厂来创建构造函数吗
- 为什么实用模块&构造函数模式将其作为全局接受
- 带有私有变量的JavaScript构造函数模式
- JavaScript 构造函数模式
- 构造函数模式下的自执行函数
- 为什么我的JavaScript构造函数模式不能工作?
- JS构造函数模式
- 简单构造函数模式
- jQuery事件触发器+构造函数模式
- return和new关键字构造函数模式的区别是什么?
- crockford的JavaScript构造函数模式真的应该更快吗?
- Javascript:混合构造函数模式和揭示模块模式