Appearance
什么是面向对象? 1.编程思想 面向对象是一种编程思想, 与之相对应的另一种思想叫做面向过程 面向过程指的是凡事亲力亲为,靠自己实现,注重的是过程 现在编程都采用面向对象的思想, 我们提出需求,根据需求分析出对象有哪些属性和方法; 再进行抽取,定义对应的构造函数,内部设置属性及方法,最终实例化一个对象(子类); 通过对象(子类)调用父类的方法,实现需求,得到结果 2.JS本身就是基于面向对象构建出来的, 例如JS中有很多内置类: 每一个属性类型值都有一个自己所属的内置类,例如Number类(每一个数字都是它的实例), String类, Boolean类, Symbol类, BigInt类, Object类, Array类, RegExp类, Date类, Error类, Function类... 每一个元素标签都有自己所属的内置类,例如div -> HTMLDivElement -> HTMLElement -> Element -> Node -> EventTarget -> Object 每一个类赋予其实例的公有属性方法,在类的原型对象上,例如Array.prototype Promise就是ES6中新增的一个内置类, 我们可以基于new Promise创建一个实例来管理异步 编程, 我经常使用Promise, 封装了..., 也研究过它的源码 3.我们平时用的Vue/React/jQuery也是基于面向对象构建出来的, 它们都是类, 平时开发的时候都是创建它们的实例来操作的, 源码... 4.我基于面向对象封装的一些组件插件, 除了上面基于Promise封装的..., 还有..., 可以创造不同的实例来管理私有的属性和操作公有的方法 5.JS中的面向对象和其他编程语言还是有略微不用的, JS中类和实例是基于原型和原型链机制 来处理的, 而且JS中关于类的多态/继承也和其他语言不太一样
对象: JS中一切我们学习和使用的东西都是对象,它是一个泛指。 类: 按照特征特点,把事物进行归纳分类(父类->子类),并且类一定会赋予它的每个成员一些公共的属性和方法。 实例: 具体的事物,类中的每一个具体的成员,每一个实例都具备一些自己私有的属性和方法, 也会具备类赋予其的公共属性和方法
类: 构造函数/构造器 constructor 自定义类: 创建一个函数,执行的时候用new来执行,这样的函数就是类(构造函数),返回的结果是 这个类的一个实例对象
类的封装/继承/多态 封装: 低耦合高内聚 继承: 子类继承父类中的属性和方法 多态: 重载和重写 重载: 方法名相同,形参个数或类型不一样
java
public void sum(int n, int m) {}
public void sum(int n, int m, float x) {}
public void sum(int n, String m) {}
sum(10, 20) // 执行第一个
sum(10, 20, 30.5) // 执行第二个
sum(10, 'AA') // 执行第三个
sum() // 报错 JS中不存在真正意义上的重载, JS中的重载指的是同一个方法根据传参不同实现出不同的效果
js
function sum (x, y, z) {
if (typeof z === 'undefined') {
//...
return
}
// ...
}重写: 在类的继承中, 子类可以重写父类的方法