js-es5(面向对象)
- 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)