js-es5(面向对象)

134 阅读3分钟
  • 1、面向对象编程:先使用一个个的对象结构集中存储现实中事物的属性和功能,然后再按需使用不同对象中的不同属性和功能。
    • 1、面向对象三大特点
      • 1)封装:创建对象,2种方法:只创建一个对象用{},反复创建多个结构相同的对象用构造函数。
      • 2)继承:所有子对象共用的属性值和方法,都要放在构造函数的原型对象中。
      • 3)多态:重写,只要觉得从父对象继承来的成员不要用,都在子对象中重写同名成员。

  • 2、this共有几种情况:8种
    • 1)obj.fun() : this指代 . 前的obj对象
    • 2)new Object() : this指代new正在创建的新对象
    • 3)构造函数.prototype.fun = function(){} : this指代将来调用时 . 前的子对象,类似1)
    • 4)fun() 匿名函数自调/回调函数执行:this指代window,严格模式为undefined
    • 5)dom.onclick=function(){} : DOM事件处理函数中this指代.前正在触发事件的dom元素
    • 6)Vue2导出对象中:this指代当前vue实例对象
    • 7)()=>{} 箭头函数中:this指代当前函数之外最近的作用域中的this,底层是bind
    • 8)call \ apply \ bind: 替换this

  • 3、Js中创建对象共有几种方式:10种
    • 1)obj = new Object()         再添加属性
    • 2)obj = {...  }               字面量
    • 3)obj = create(){...return obj}  工厂函数
    • 4)obj = new Student(‘lilei’,11)  构造函数,属性值全部通过参数传入
    • 5)obj = new Student()        原型对象方式,再单独添加个性化属性,包括prototype
    • 6)obj = new Student(‘lilei’,11)  混合模式,参数传入后,再添加个性化属性,包括prototype
    • 7)obj = new Student(‘lilei’,11)  动态混合,prototype属性值在内部添加
    • 8)内部p=new person()       寄生构造,借鸡生蛋,构造函数中调用其他构造函数
    • 9)ES6:class 语法糖 1、class包裹构造函数和原型对象方法 2、构造函数名升级为class名字,构造函数统一更名constructor 3、方法变为fun(){}
    • 10)function Person(){ ...return p} 稳妥构造函数,闭包,不用this,不用new

  • 4、Js中实现继承共有几种方式:7种
    • 1)原型链式继承:父类的实例作为子类的原型Cat.prototype = new Animal()继承prototype
    • 2)构造函数继承:Cat内部Animal.call(this,name)              继承this.的属性
    • 3)实例继承:Cat内部o=new Animal()... return o               继承所有,得到animal
    • 4)拷贝继承:Cat内部o=new Animal()  遍历o的所有属性 到Cat.prototype
    • 5)组合继承:结合1和2,Cat.prototype.constructor = Cat
    • 6)寄生组合继承:5+  Super.prototype = Animal.prototype  Cat.prototype = new Super()
    • 7)class语法糖: class + extends

  • 5、实现深克隆共有几种方式
    • 1)Json.stringify() + parse  浅克隆
    • 2)var obj2 = Object.assign({}, obj1);   浅克隆
    • 3)递归克隆函数:深拷贝 遍历数组和对象,其他直接复制,用let newObj

  • 6、new Person():new做了4件事
    • 1)创建一个新的空对象,即创建空子对象
    • 2)让这个空的子对象继承构造函数的原型对象
    • 3)调用构造函数,将this替换为这个子对象,通过强行赋值方式为这个子对象添加属性
    • 4)返回这个子对象的地址

  • 7、Js中的12中内置类型:
    • String Number Boolean Symbol   Array Date RegExp  Math Error  
    • Funcion Object global(window)