当我使用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] 删除。
我来说两句