这种创建对象的方法是否只适用于单例对象?
Is this method of creating objects only applicable for singleton objects?
我正在浏览Douglas Crockford编写的一些代码。他使用下面的结构创建对象。
var obj = (function(){
var x, y, z; // These are private fields
// This is private method
function func1() {
}
return {
// This is public method
init : function() {
}
};
}());
相对于下面的构造函数,我更喜欢这种方式。
function Obj() {
// Uses __ to denote private
this.__x = 0;
this.__y = 0;
this.__z = 0;
// Private method
this.__func1 = function() {
};
// Public method
this.init = function() {
}
}
var obj = new Obj();
我不喜欢构造函数方法,因为你需要使用__来表示私有字段或方法(这并没有真正使字段私有),你需要使用这个关键字来访问任何字段或方法。我喜欢第一个方法,但我不知道如何使用它定义多个对象。
我们可以在第一个方法中定义多个对象吗?或者它只能用于创建单例对象?
要实例化新对象,需要使用new关键字,该关键字需要使用函数作为构造函数。我看到两个选项:
在函数中返回一个函数而不是对象字面值:
var obj = (function(){
var x, y, z; // These are private fields
// This is private method
function func1() {
console.log("func1");
}
return function() {
// This is public method
this.init = function() {
func1();
}
};
})();
或者不要使用自执行函数:
var obj = function(){
var x, y, z; // These are private fields
// This is private method
function func1() {
console.log("func1");
}
return {
// This is public method
this.init = function() {
func1();
}
};
};
都让我们执行var newObj = new obj()。不确定两者之间的含义,但我通常只是使用一个函数。
请注意:
this.__x
没有将x设为私有的(除非有可能按照约定,即人们学会不使用它)
而:
function Obj() {
// private
var x = 0;
var __y = 0;
// public
this.z = 0;
// Private method
function func1() {
};
// Public method
this.init = function() {
}
}
我发现这个链接很有用:http://www.phpied.com/3-ways-to-define-a-javascript-class/
相关文章:
- 我未保存的更改指令需要适用于具有不同名称的所有表单
- jQuery表单验证(如果==“执行此操作”)仅适用于第一次输入
- PHP表单适用于索引,但不适用于联系我们页面
- Jquery函数只适用于第二次单击
- 制作表单's onsubmit仅适用于特定提交
- JQuery验证仅适用于提交的表单中的第一个元素.[打算验证所有内容]
- jquery:$(input).keydown无法在单选按钮上设置处理程序,同样的代码也适用于文本
- jQuery表单验证只适用于一次发布
- 使j查询ajax调用既适用于页面加载,也适用于单击按钮
- 在火狐插件中处理右键单击,仅适用于文档
- 我的加载更多功能适用于按钮单击,但它不适用于滚动
- document.getElementById 适用于一个表单元素,但不适用于另一个表单元素
- 弹出模式仅适用于表格中的第一个元素,第二次单击后不会再次打开
- AngularJS:ng-单击不起作用,适用于<按钮>
- javascript:表单不仅被IE取代,而且,它适用于所有其他浏览器
- 使切换功能仅适用于单击打开的框,而不是所有框
- jquery悬停仅适用于单击事件
- 这种创建对象的方法是否只适用于单例对象?
- Backbone.js只适用于单页应用吗?
- AngularJS只适用于单页应用(spa)吗?