美文网首页
一个函数是否被new有啥区别?

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

作者: percykuang | 来源:发表于2019-12-17 14:48 被阅读0次
    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所引用的对象。

    相关文章

      网友评论

          本文标题:一个函数是否被new有啥区别?

          本文链接:https://www.haomeiwen.com/subject/flbsnctx.html