基于JavaScript规范,类构造函数在被new关键字调用时返回值this.

我们可以把返回值改成其他值吗?如果是,这是一种不好的做法吗?我想问的是,这是否是一种不好的做法,例如,可能是因为一些与继承相关的东西.例如

class Car {
  constructor(color) {
    this.color = color
    return this.printColor
  }
  printColor = () => {
    console.log(this.color)
  }
}

const car1 = new Car('red')
car1()

这是一个新的 idea ,还是人们每天都做的正常事情?

推荐答案

类构造函数在被new关键字调用时返回值this.

See What is the 'new' keyword in JavaScript? and How does the new operator work in JavaScript? for details.

我们可以把返回值改成其他值吗?

是的,只要它是一个对象,您就可以使用return覆盖默认值,就像您在示例代码中所做的那样.请参见What values can a constructor return to avoid returning this?What is returned from a constructor?了解其具体工作原理.

如果是,这是一种不好的做法吗?

对让new Car返回一个函数而不是Car个实例是奇怪和意外的.人们不是每天都这样做,他们不应该开始这样做:-)

唯一的例外是单例模式(当然是is problematic itself),其中构造函数可能会删除单例实例而不是新实例.(不过,还有其他方法可以编写JS代码来创建单例,从而完全避免构造函数.)

Javascript相关问答推荐

如何为GrapesJS模板编辑器创建自定义撤销/重复按钮?

类型脚本中只有字符串或数字键而不是符号键的对象

如何修复我的js构建表每当我添加一个额外的列作为它的第一列?

Mongoose post hook在使用await保存时不返回Postman响应

在拖放时阻止文件打开

Prisma具有至少一个值的多对多关系

如何迭代叔父元素的子HTML元素

JQuery Click事件不适用于动态创建的按钮

如何将数组用作复合函数参数?

如何在不影响隐式类型的情况下将类型分配给对象?

为什么我的按钮没有从&q;1更改为&q;X&q;?

是否可以将Select()和Sample()与Mongoose结合使用?

将基元传递给THEN处理程序

Cherrio JS返回父div的所有图像SRC

如何修复错误&语法错误:不能在纯react 项目中JEST引发的模块&之外使用导入语句?

在GraphQL解析器中修改上下文值

用另一个带有类名的div包装元素

无法向甜甜圈图表上的ChartJSImage添加可见标签

如何在不获取其子元素的文本内容的情况下获取元素的文本内容?

将数据添加到数据库时不输出