在Javascript中,为什么从构造函数返回函数会破坏对象?

科迪·布格斯坦

当我使用new运算符从函数创建新对象时,会得到一个可以访问其属性的对象。

但是,如果我从构造函数返回一个函数,则该对象没有属性,并且在我尝试访问它们时返回未定义。为什么?

function Car1() {
  this.brand = "Honda"
}
var car1 = new Car1()
console.log(car1.brand) // "Honda" 

function Car2() {
  this.brand = "Honda"
  return function() {
    console.log('TEST');
  }
}
var car2 = new Car2()
console.log(car2.brand) // undefined. why??

全堆的家伙

从MDN文档中的“ new”运算符:

如果构造函数未明确返回对象,则使用在步骤1中创建的对象。(通常,构造函数不返回值,但是如果他们想覆盖普通的对象创建过程,则可以选择这样做。)

因此,您将在return中显式返回一个函数对象,该对象将覆盖由Car2构造函数创建的对象的默认返回

您要返回的函数对象中没有brand属性,因此您正在获取undefined,可以通过将brand属性显式添加到返回的函数对象中来进行检查:

function Car2() {
    this.brand = "Honda"
    const func =  function(){
        console.log('TEST');
    }
    func.brand = "Toyota";
    return func;
}
var car2 = new Car2()
console.log(car2.brand)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么构造函数会返回对象,而不返回JavaScript中的基元?

为什么反引号构造函数参数中的空格会破坏编译器?

为什么我在返回函数中收到此错误?

在Python中,何时/为什么要返回函数?

在javascript中返回函数的函数

从JavaScript中的函数返回函数

为什么以SCALAR返回函数的引用

固结返回函数为什么恒定?

为什么typeof String返回函数

返回函数中未定义的Javascript全局对象

javascript:如何从对象动态返回函数

返回函数JavaScript

为什么这个函数会破坏我数组中的值?

为什么在Safari中我的生日会破坏JavaScript的Date()函数?

返回函数的返回对象

如果 javascript 中的所有内容都是对象,那么为什么 typeof 运算符会返回对象的函数?

函数返回函数javascript

从函数返回函数,为什么省略括号?

为什么函数可以返回函数本身

理解Javascript中的双返回函数

即使未明确构造函数调用,它也会破坏返回对象?C ++

多个返回函数的构造函数参数

为什么“返回”不会破坏嵌套在函数中的循环?

从Promise中返回非返回函数会导致警告

为什么继承构造函数会破坏聚合初始化?

为什么不返回函数返回的数据?

为什么setInterval()不返回函数的返回值?

为什么在函数 B 中调用函数 A 而不是在函数 C 中调用函数 B 会破坏 go 运行时

如何在函数javascript / nodejs中返回函数?