我正在阅读道格拉斯·克罗克福德写的一些代码。他使用以下结构创建对象。
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();
我不喜欢构造函数的方法,因为您需要使用__来表示私有字段或方法(这并不会使字段成为私有),您需要使用此关键字来访问任何字段或方法。我喜欢第一种方法,但我不知道如何使用它来定义多个对象。
我们可以在第一个方法中定义多个对象,还是只能用于创建单个对象?
答案 0 :(得分:0)
要实例化新对象,您需要使用需要将函数用作构造函数的new关键字。我看到两个选项:
在函数中返回一个函数而不是object literal:
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()。不确定两者之间的含义是什么,但我通常只使用一个函数。
答案 1 :(得分:0)
请注意:
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/