new和构造函数

1. 构造函数

  1. 构造函数名字的第一个字母通常大写。
  2. 特点:
  • 构造函数内部使用了this关键字。
  • 生成对象时必须使用new命令。

2.new命令的作用

  1. 作用执行构造函数,返回一个实例对象。
  2. new命令执行时,构造函数内部的this指向新生成的实例对象。
  3. 忘记使用new命令,构造函数就变成了普通函数,this代表全局对象。为了保证构造函数必须和new命令一起用,一个方法是:构造函数内部使用严格模式use strict,此时函数内部的this不能指向全局对象,默认为undefined,导致不加new会报错。另一个方法是:构造函数内部判断是否使用了new命令,如果没有使用,则直接返回一个实例对象。
function Fubar(foo, bar) {
  if (!(this instanceof Fubar)) {
    return new Fubar(foo, bar);
  }

  this._foo = foo;
  this._bar = bar;
}

Fubar(1, 2)._foo // 1
(new Fubar(1, 2))._foo // 1

3. new命令原理

  1. 创建一个空对象,作为将要返回的对象实例。
  2. 将这个空对象的原型,指向构造函数的prototype属性。
  3. 将这个空对象赋值给函数内部的this关键字。
  4. 开始执行构造函数内部的代码。
    构造函数内部,this指向新生成的空对象。

4. 关于构造函数的返回值:

  • 如果没有return语句:返回this对象。
  • return语句且return的是一个跟this无关的对象:返回return后的对象。
  • return语句但return的不是对象:返回this对象。
    如果对普通函数(内部没有this关键字的函数)使用new命令,则会返回一个空对象。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容