美文网首页
对函数使用new操作符时,会发生什么

对函数使用new操作符时,会发生什么

作者: 没头脑很不高兴 | 来源:发表于2017-12-08 22:11 被阅读0次

    new 是用来调用一个构造函数的关键字
    使用方法如下

    function Person(name, age){
      this.name = name
      this.age = age
    }
    let p1 = new Person('han', 18) // Person{name: "han", age: 18}
    

    如上代码,就使用函数生成了一个对象,这个函数的名称是构造函数,即为构造对象的函数,为了和其他的函数进行区别,在命名的时候会特意将它的首字母大写

    可能你会觉得疑惑,明明上面的代码可以直接写成这样

    var o = {
      name: 'han',
      age: 18
    }
    

    为什么要多次一举,要使用一个函数来生成对象?
    答:玩过红警吗?里面有十几种兵种,每个兵种的功能都不一样,如果把一个小兵当成一个对象,如那么这个对象上有对象上有 小兵的编号、血量、兵种、输出、所属玩家、等级、位置信息等属性或方法,如果只有一个这样的小兵,那还是比较好写代码的,只需要写一个对象

    如果有1000个小兵呢?是不是也要写1000个对象?

    这个时候,构造函数的功能就体现出来了,因为我们只需要给一个函数传进去不同的参数、就可以得到不同的小兵,甚至可以直接用循环的方式直接生成想要的小兵的数量

    这个时候构造函数的功能就体现出来了

    那么,为什么使用 new 的时候,这个函数就可以生成一个对象了呢?

    其实,不用new,也有别的办法生成对象

    代码如下:

    function Person(name, age){
      var o = {}
      o.name = name
      o.age = age
      return o
    }
    let p1 = Person('han', 18) // {name: "han", age: 18}
    

    可以看到,结果几乎是一样的,只是对象前少了一个 Person(Person只是表示这个对象是由Person函数构造出来的),那么,就可以推测出new 的作用了——隐式的在函数内部加了2句代码

    整体代码如下:

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

    因为this是一个关键字,程序员直接对 this 赋值会报错

    所以这个操作是JS引擎帮我们做的

    使用new时,函数背部的 this 在运行时会变成生成的那个对象

    相关文章

      网友评论

          本文标题:对函数使用new操作符时,会发生什么

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