2.3构造函数模式基础

构造函数模式的目的就是为了创建一个自定义类,并且创建这个类的实例

function CreateJsPerson(name,age){
  // 浏览器默认创建的对象就是我们的实例p1 -》 this
  this.name = name; // p1.name = name
  this.age = age;
  this.writeJs = function () {
    console.log("my name is" + this.name)
  }
  // 浏览器再把创建的实例默认的进行返回 }
var p1 =new CreateJsPerson("张三"20); //CreateJsPerson中的this是当前实例p1
p1.writeJs(); // writeJs中的this是p1
var res =
CreateJsPerson("aaaa",30); // 这样写不是构造函数模式执行而是普通的函数执行,由于没有写return所以res= undefined,并且CreateJsPerson这个方法中的this是window
console.log(res) // undefined
var p2 =new CreateJsPerson("李四",30);
p2.writeJs();

构造函数模式和工厂模式的区别:

  1.执行的时候

    普通函数执行: createJsPerson()

    构造函数模式执行: new CreateJsPerson() 通过new执行后,我们的CreateJsPerson就是一个类了

    而函数执行的返回值(p1)就是CreateJsPerson这个类的一个实例

  2.在函数代码执行的时候

    相同点: 都是形成一个私有作用域,然后经历形参赋值,预解释,代码开始从上到下执行(类和普通函数一样,它也有普通函数的一面)

    不同点:1)在代码执行之前,不用自己在手动的创建obj对象了,浏览器会默认的创建一个对象数据类型的值(这个对象其实就是我们当前类的一个实例),

        2)接下来代码从上到下执行,以当前实例为执行的主体(this代表的就是当前的实例),然后分别把属性名和属性值赋值给当前的实例

        3)最后浏览器会默认的把创建的实例返回

 

引入知识点:

1.创建一个数组:

  var ary = [] // 字面量方式

  var ary = new Array(); // 实例创建的方式 -》构造函数模式执行的方式

  不管哪一种方式ary都是Array这个类的一个实例

2.JS中所有的类都是函数数据类型的,它通过new执行变成了一个类,但是它本身也是一个普通的函数

JS中所有的实例都是对象数据类型的

3.在构造函数模式中,类中(函数体中)出现的this.xxx = xxx 中的this是当前类的一个实例

4.p1和p2都是 CreateJsPerson这个类的实例,所以都拥有writeJs这个方法,但是不同实例之间的方法是不一样的

  在类中给实例增加属性(this.xxx = xxx)属于当前实例的私有属性,实例和实例之间是单独的个体,所以私有属性之间是不相等的

   console.log(p1.writeJS === p2.writeJS) ->false

posted @ 2018-04-23 11:40  Z-DL  阅读(169)  评论(0编辑  收藏  举报