面向对象
概述(oop)
面向对象是一种思维,将对应的你需要用到的对象进行提取,将对应方法综合到对应的对象中,在需要调用对应的方法的时候去找对应的对象(万物皆对象(任何东西都可抽取为对象),主要的过程就是找对应的对象做对应的事情)面向对象的核心就是找对象
面向对象的三大特性
-
封装(将对应的属性和方法抽取带对应的类(构造函数)中)
-
继承(子类继承父类 子类拥有父类非私有属性及方法)
-
多态(一个东西的多种形态体现(基于继承) 重载(一个类多个函数重名(js中不被允许的)) 重写(子类重写父类的方法))
对象声明的方法
使用new关键字来声明(实际调用的都是 构造函数)
es6新增的class
class Person{
// 类的构造器
constructor(name){
this.name=name
}
}
// 调用类中的构造器
let person=new Person('jack')
es3自带的构造函数
function Person(name){
this.name=name
}
let person=new Person('jack')
构造函数和class的区别
-
构造函数的兼容回避class要好
-
构造函数会进行预编译 class不会
-
构造函数可以当作普通函数编译
new构造函数的时候主要过程
-
自动创建对象
-
手动属性赋值
-
自动返回对象
使用工厂函数来声明
// 对象工厂函数 (忽略细节)
function factory(name){//创建一个对象
let obj = new object()
// 给对应的属性赋值
obj.name = name// 返回这个对象
return obj
}
let obj = factory('jack')
console.1og(obj)
使用工厂函数的主要过程
-
手动创建对象
-
手动属性赋值
-
手动返回对象
封装
抽取对应的属性和方法(属性为名词,方法为动词)
继承
子类继承父类的非私有属性及方法
使用extends来继承 super指向对应的父类的构造函数
多态
一个物品的多种形态主要右两个内容实现
-
重载 在同一个类中有两个同名的方法 通过参数个数及参数类型来分辨 js中没有
-
重写 在子类中重写父类的方法