【JavaScript进阶学习】面向对象 - 语法

  1. 创建对象:
    • 单例模式:创建一个对象,并只操作一个对象
    • 工厂模式:可以批量创建同特点对象
      • 自定义封装函数(废弃)
      • 构造函数(内置)
        • 利用new执行函数(new的原理)
          1. 创建一个新对象
          2. 修改原函数的this指向该对象
          3. 将这个新对象的原型链指向原函数的prototype属性
          4. 检测原函数是否主动返回对象,如果没有,那就返回这个新对象
  2. 原型
    • 原型属性:prototype,专属于函数的一个内置属性,对象类型。
      • 作用:为了给将来自身被new执行时创建出来的对象的原型链指向
    • 原型链:__proto__,专属于对象的一个内置属性,对象类型。
      • 作用:用来指向创建自身的函数的prototype
    • 对象访问属性或方法的规则:
      • 先在自身查找,找到了就使用,找不到,顺着原型链,依次向上查找,任意一层找到了,都停止查找并使用,直到顶层,都找不到,抛出undefined
      • 如果多层原型链中都存在同名方法,就近使用
    • 所有对象的原型链,最终必然指向Object.prototype
      • js万物皆对象
    • 原型链关系的检测
      • 函数.prototype.isPrototypeOf( 实例 )
      • 实例 instanceof 函数
      • 有关系得到true,没有关系得到false
  3. 面向对象编程的语法
    • 对象的属性,在构造函数内定义
    • 对象的方法,在原型上定义
    • 构造函数中的this指向将来的实例
    • 原型方法因为将来会被实例执行,所以原型方法内的this可以认为指向将来的实例(一般情况下,构造函数的this和原型方法的this是同一个this)
    function fn(m){
        // 属性
        this.message = m;
    }
    // 方法
    fn.prototype.show = function(){
        console.log(this.message);
    }
    // 创建实例
    const f1 = new fn("hello");
    f1.show();
    

你可能感兴趣的:(javascript的进阶学习,javascript,学习,原型模式)