一个函数是否被new有啥区别?

function Person(name, age) {
  this.name = name
  this.age = age
}

new Person('Flinn', 20)
// 在函数体里面实际会发生如下操作:
// var this = {}
// this.name = name
// this.age = age
// return undefined (被忽略)
// return this

Person('King', 22)
// 在函数体里面实际会发生如下操作:
// this.name = name (浏览器下,函数在window上下文被调用,所以this为window,所以window.name = 'King')
// this.age = age   (浏览器下,函数在window上下文被调用,所以this为window,所以window.age = 22)
// return undefined

但是要注意:

  • 如果一个函数的返回值是引用类型(数组,对象或者函数)的数据,那么这个函数作为构造函数用new运算符执行构造时,运算的结果将被它的返回值取代,这时候,构造函数体内的this值丢失了,取而代之的是被返回的对象。

  • 如果一个函数的返回值是一个值类型,那么这个函数作为构造函数用new运算符执行构造时,它的返回值将被丢弃。new 表达式的结果仍然是this所引用的对象。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容