JavaScript高级复习——js面向对象
面向对象
优点:易维护、易复用、易扩展。适合多人合作。
缺点:性能比面向过程低。
面向过程
优点:性能比面向对象高,适合跟硬件联系很紧密的东西,例如单片机。
缺点:没有面向对象易维护、易复用、易扩展。
面向对象的思维特点
1、抽取(抽象)对象共用的属性和行为封装成一个类。
2、对类进行实例化,获取类的对象。
对象
万物皆对象,对象是一个具体的事物。
在JavaScript中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象。例如:字符串、数值、数组、函数等。
对象由属性和方法组成:
属性:事物的特征,在对象中用属性来表示(常用名词)
方法:事物的行为,在对象中用方法来表示(常用动词)
类class
类抽象了对象的公共部分 ,泛指某一大类(class)
对象特指某一个,通过类实例化一个具体的对象。
创建类
语法:
class Name { // class body }
创建实例:
var xx = new name();
例子
// 1、创建类class,创建一个明星类 class Star { } // 2、利用类创建对象 new new Star();
constructor构造函数
constructor()方法是类的构造函数(默认方法),用于传递参数,返回实例对象,通过new命令生成对象实例时,自动调用该方法。如果没有显示定义,类内部会自动给我们创建一个constructor()
// 1、创建类class,创建一个明星类 class Star { constructor( uname,uage ){
this.name = uname;
this.age = uage;
}
sing(){
console.log("我会唱歌!")
console.log(this.name )
}
} // 2、利用类创建对象 new let ldh = new Star( '刘德华' );
let zxy = new Star( '张学友' );
console.log(ldh,zxy);
// 类里面所有的函数不需要写function
// 多个函数方法之间不需要添加逗号分隔
ldh.sing();
zxy.sing();
5个小tips:
1、通过class关键字创建类,类名我们还是习惯性定义首字母大写。
2、类里面有个constructor函数,可以接收传递过来的参数,同时返回实例对象。
3、constructor函数只要有new生成实例时,就会自动调用这个函数,如果我们不写这个函数,类也会自动生成这个函数。
4、生成实例new不能忽略
5、最后注意语法规范,创建类 类名后面不要加小括号,生成实例类名后面加小括号,构造函数不需要加function
继承
普通继承
// 子类不加constructor直接调用父类中的方法,可以直接使用 class Father { constructor() { } money() { console.log(100) } } class Son extends Father {
} var son = new Son() son.money() // 100
继承+传递参数
// 子类不加constructor直接调用父类中的方法,可以直接使用 class Father { constructor(x, y) { this.x = x this.y = y } sum() { console.log(this.x + this.y) } } class Son extends Father { constructor(x, y) { super(x, y) // super调用了父类中的构造函数,将参数1,2传入父类构造函数的x,y }
// 其实不写constructor也能成功调用 } var son = new Son(1, 2)
var son2 = new Son(11, 22) son.sum() // 3
son2.sum() // 33
// super关键字调用父亲普通函数 // 如果要使用父类的方法 class Father { say() { return '我是爸爸' } } class Son extends Father { say() { console.log(super.say() + '的儿子') } } var son = new Son() son.say() // '我是爸爸的儿子'
使用类的注意事项
1、在ES6中类没有变量提升,所以必须先定义类,才能通过类实例化对象
2、类里面的共有属性和方法一定要加this使用
3、类里面的this指向问题
4、constructor里面的this指向的是创建的实例对象,方法里面的this指向这个方法的调用者
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了