构造函数

130 阅读1分钟

构造函数和普通函数的区别

1、构造函数也是一个普通函数,创建方式和普通函数一样,但是构造函数习惯上首字母大写
2、调用方式不一样
  2.1、普通函数的调用方式:直接调用person()
  2.2、构造函数的调用方式:需要使用new关键字来调用 new Person()
3、构造函数与类名相同
  Person()这个构造函数,Person既是函数名,也是这个对象的类名
4、构造函数内部用this来构造属性和方法
  // 普通函数内部不建议使用this
  // 构造函数内部,this指向的构造出来的对象
  // 普通函数内部,this指向的时window全局对象,无意间就会为window添加了一些全局变量或函数
  function Person (name, age) {
    this.name = name;
    this.age = age;
    this.sayHi = function () { alert('Hi') }
  }
5、构造函数的执行流程
  5.1、立刻在堆内存中创建一个新的对象
  5.2、将新建的对象设置为函数中的this
  5.3、逐个执行函数中的代码
  5.4、将新建的对象作为返回值
6、普通函数没有返回值,为undefined,构造函数回马上创建一个新对象,并将改对象作为返回值返回
  // 普通函数
  function person () {};
  var per = person();
  console.log(per); // undefined
  // 构造函数,默认返回this,也就是新的实例对象
  function Person () {};
  var per = new Person();
  console.log(per); // [object, object]
7、构造函数执行 var p = new Person() 的情况
  7.1、创建一个空对象
    var p = {};
  7.2this变量指向对象p
    Person.call(p)
  7.3、p继承了构造函数Person()的原型
    p.__proto__ = Person.prototype
  7.4、执行构造函数Person()内的代码
  7.5return 对象p