javascript - 我可以确认:获取对象(构造函数返回)以调用其构造函数属性是 new 运算符实现的吗?
问题描述
不确定这是否有点傻,但我尝试创建一个构造函数,该函数创建一个不需要使用new
的对象的实例。
C()
正试图效仿new C()
。
我坚持的是让新对象立即调用它的构造方法。
我可以确认这是new
运营商以某种方式实现的吗?
C = function () {
this.color = '';
this.makeColor = function () {
this.color = "yellow";
}.bind(this)
return {
constructor: C
}
}
i = C();
console.log(i);
解决方案
如果您不想使用,new
那么您的函数仍然可以构造一个对象。您不需要返回具有构造函数属性的对象,而是(构造的)对象。
您必须注意的另一个区别:如果this
您不使用new
. this
将是全局对象 ( window
) 或undefined
在严格模式下。而是使用您自己的变量(您需要初始化它)。
这是一个例子:
var C = function () {
let that = {}; // <-- don't use `this`, but your own variable
that.color = '';
that.makeColor = function () {
that.color = "yellow";
}.bind(that);
return that; // <--- just return the object
}
let obj = C();
console.log(obj);
注意:不要定义没有var
,let
或的变量const
。此外,i
是一个最常用于数字的变量名称(如循环变量)。看到用于对象的变量名看起来很奇怪。
推荐阅读
- r - tidyr 中的 Pivot_wider() 函数
- android - Kotlin 将图像和描述上传到 Firebase
- javascript - href 目标 _blank 无法正常工作 - 未在新选项卡中打开链接,javascript 以不同方式处理事件
- office-js - 需要将 Office 插件 (office.js) 中创建的 Excel 报告导出为 PDF
- python - 即使我已经在 tkinter python 中逃脱了程序,如何保存我的位置?
- c - 调用函数不会执行该函数内的打印语句
- javascript - 为什么这个简单的 moment.js 逻辑会导致无限循环?
- reactjs - react jsx的平均分
- sql - 如何解决 Mode.com 上的警告:“...”处或附近的语法错误?
- fonts - 有没有用 v-hook 写 q 的字体?