首页 > 解决方案 > 我可以确认:获取对象(构造函数返回)以调用其构造函数属性是 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); 

标签: javascript

解决方案


如果您不想使用,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是一个最常用于数字的变量名称(如循环变量)。看到用于对象的变量名看起来很奇怪。


推荐阅读