我试图理解 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 文字和工厂时,它们确实有一个构造函数 [本机代码]
这是我在控制台中得到的:
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 引擎实际上是通过内部的“新”关键字创建 obj_lit 和 obj_fac 吗?
当我们不想采用通过构造函数创建对象的经典方式时,它不会破坏使用文字和工厂的整个概念吗?