【发布时间】:2019-08-06 08:47:52
【问题描述】:
我正在尝试理解 javascript 中的对象创建,并且我知道我们有几种方法可以完成它:Object Literal、Factory 和 Constructor。
/***********************************************/
/***********************************************/
// Literal - Singleton
const obj_lit = {
log_lit: function() {
//console.log("Obj Literal");
document.write("Obj Literal<br>");
}
};
obj_lit.log_lit();
/***********************************************/
/***********************************************/
// Factory - Explicit Return
function objFac() {
return {
log_fac: function() {
//console.log("Obj Factory");
document.write("Obj Factory<br>");
}
};
}
const obj_fac = objFac();
obj_fac.log_fac();
/***********************************************/
/***********************************************/
// Constructors - Implicit Return
function ObjCon() {
this.log_con = function() {
//console.log("Obj Constructor");
document.write("Obj Factory<br>");
}
}
const obj_con = new ObjCon();
obj_con.log_con();
我实际上是在使用控制台,但是在 jsfiddle 中我通过 doc write 输出
与我们明确使用 obj 构造函数类型的方式相比,我们没有通过构造函数来处理 obj 字面量和工厂。到目前为止一切顺利,但是当我在控制台中检查 obj 文字和工厂时,它们确实有一个构造函数 [native code]
这是我在控制台中得到的:
obj_lit.constructor
ƒ Object() { [native code] }
obj_fac.constructor
ƒ Object() { [native code] }
obj_con.constructor
ƒ ObjCon() {
this.log_con = function() {
console.log("Obj Constructor");
}
}
那么 obj_lit 和 obj_fac 的这 2 个原生构造函数到底是什么?
js 引擎是否真的通过内部的“new”关键字创建了 obj_lit 和 obj_fac?
当我们不想采用通过构造函数创建对象的经典方式时,它不会破坏使用文字和工厂的整个概念吗?
【问题讨论】:
-
它们是
Object类的构造函数。
标签: javascript oop constructor object-literal objectfactory