JavaScript-面向对象

WGenji Lv4

编程思想

面向过程

面向过程就是分析出解决问题所需要的步骤,用函数一步步实现,使用的时候一个个依次调用

例子:蛋炒饭

优点:性能较高

缺点:没有面向对象灵活,可复用

面向对象

OOP

面向对象就是把事务分解成一个个对象,由对象之间分工与合作

例子:盖浇饭

优点:灵活,可复用,容易维护和开发,适合多人合作的大项目

特性:封装,多态,继承

构造函数

JS通过构造函数实现面向对象的封装特性

实例创建的对象彼此独立,互不影响

缺点:浪费内存

不同的实例对象,他们的函数占用不同的内存

1
2
3
4
5
6
7
8
9
function Star(name){
this.name = name
this.sing = function(){
console.log('唱歌')
}
}
const ldh = new Star('刘德华')
const zxy = new Star('张学友')
// ldh.sing != zxy.sing

原型

原型对象

prototype

每一个构造函数都有一个prototype

通过原型分配的函数是所有对象所共享的

this指向实例化对象

把公共的函数写到原型对象里去就可以节约内存

constructor属性

每个原型对象都有一个constructor属性 (构造函数)

指向该原型对象的构造函数

应用场景:指向该原型对象的构造函数

image-20220508160806598

对象原型

每个对象都会有一个属性 [[proto]]

image-20220508191558042

原型继承

1
2
3
4
5
6
7
8
function Person(){
this.eyes = 2
}
function Man(){

}
Man.prototype = new Person()
Man.prototype.constructor = Man

原型链

基于原型对象的继承使得不同构造函数的原型对象关联在一起, 并且这种关联的关系是-种链状的结构,我们将原型对象的链状结构关系称为原型链

实质就是一个查找规则 ,先找对象自身,依次往上找

所有的对象里面都有对象原型,指向原型对象

所有的原型对象里面都有constructor,指向创造该原型对象的构造函数

image-20220509142436696

1
2
console.log(Array instanceof Object)
//可以检查构造函数的原型对象是否出现在某个实例对象的原型链上
  • Title: JavaScript-面向对象
  • Author: WGenji
  • Created at : 2024-08-26 13:51:51
  • Updated at : 2024-08-26 13:51:51
  • Link: https://redefine.ohevan.com/2024/08/26/2.javascript/js进阶/3.深入面向对象/
  • License: This work is licensed under CC BY-NC-SA 4.0.