构造函数和原型链

2019-07-02  本文已影响0人  Mcq
 
    // 构造函数的目的:创建对象
    // 学生类→ 构造函数
    function Student(name,age,gender) {
      // 属性
      this.name = name;
      this.age = age;
      this.gender = gender;
      // 方法
      this.writeCode = function() {
        console.log('我会写代码')
      };
      this.sayHi = function(){
        // 方法内部中this,代表的是调用方法的对象
        console.log('我叫' + this.name + ',今年' + this.age);
      };
    }
    
    // 创建对象
    var zs = new Student('张三',10,'男');

new关键字的执行过程:

​ // 1. new关键字,创建一个空的简单JavaScript对象(即{},一片空间);

​ // 2. 进入构造函数内部,this关键字会指向内存中创建的那个对象(new关键字创建的)

​ // 3. 通过this向内存中的对象中添加属性和方法

​ // 4. 最终把this返回给外部接收的变量zs,即返回this

构造函数和普通函数

什么是原型

构造函数和原型的关系

原型的作用

作用:把不变的方法存入到构造函数的原型中,构造函数创建的所有实例可以==共享==原型中的成员。

    // 构造函数的目的:创建对象
    // 学生类→ 构造函数
    function Student(name, age, gender) {
      // 属性
      this.name = name;
      this.age = age;
      this.gender = gender;
    }

    // 获取原型
    var yx = Student.prototype;
    // 把方法存入到原型中
    // 对象.key = value;
    yx.writeCode = function () {
      console.log('我会写代码')
    };
    yx.sayHi = function () {
      // 方法内部中this,代表的是调用方法的对象
      console.log('我叫' + this.name + ',今年' + this.age);
    };

    // 创建对象
    var zs = new Student('张三', 10, '男');
    var ls = new Student('李四', 12, '男');
    var ww = new Student('王五', 18, '女');

实例对象和原型的关系

    // 构造函数的目的:创建对象
    // 学生类→ 构造函数
    function Student(name, age, gender) {
      // 属性
      this.name = name;
      this.age = age;
      this.gender = gender;
   
    }

    // 获取原型
    var yx = Student.prototype;
    // 把不变的属性放入原型中
    yx.type='学生';

    // 创建对象
    var zs = new Student('张三', 10, '男');

    // 对象可以访问得到原型中成员
    console.log(zs.type); // 学生
    console.log(zs.__proto__ === yx)  // true

原型链

儿子不但能够继承父亲的遗产,还可以继承他父亲的父亲的父亲的......祖先的遗产。

    // 【Object 祖宗类】
    // 不论任何类型的对象,都直接或间接的继承了Object
    // Object 构造函数
    // 原型:Object.prototype
    var objYx = Object.prototype;
    objYx.a = 1;

    // 【学生类】
    function Student(name, age, gender) {
      // 属性
      this.name = name;
      this.age = age;
      this.gender = gender;

    }

    // 获取原型
    var yx = Student.prototype;
    // 把不变的属性放入原型中
    yx.type = '学生';
    
    // 创建对象
    var zs = new Student('张三', 10, '男');
    console.log(zs.a); // 1
    console.log(zs.__proto__.__proto__ === objYx); // true

上一篇 下一篇

猜你喜欢

热点阅读