【发布时间】:2020-02-29 10:42:33
【问题描述】:
当我从一个函数创建一个新对象时,使用new 运算符,我得到一个我可以访问其属性的对象。
但是,如果我从构造函数返回一个函数,则该对象没有属性,并且在我尝试访问它们时返回 undefined。为什么?
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??
【问题讨论】:
-
如果在函数结束时返回其他对象,则会覆盖原来的新对象内容。因为您正在传回新功能
-
我不会返回另一个对象。但我正在返回一个函数
-
因为您将属性
brand添加到了一个对象,而return添加了另一个对象。 “我没有返回另一个对象。但我正在返回一个函数” 函数是对象。在控制台中检查someFunction instanceof Object。 -
typeof(car1) === 'object'typeof(car2) === 'function'car1 instanceof Object === truecar2 instanceof Object === true最后一个意味着您可以将 car2 作为普通对象访问,尽管它实际上是派生函数。
标签: javascript constructor scope closures