【ES5】—ES5中类与继承

在这里插入图片描述

一、如何定义类

  1. 类的首字母要大写,用于识别出与普通函数的不同
// 类  构造函数
function People () {
	this.name = 'xiaoxiao'
	this.age = 18
}
// 实例化对象
let p1 = new People()

二、动态属性和方法

1. 动态属性再构造函数里面定义

// 类
function People (name, age) {
	console.log(this)
	this.name = name
	this.age = age
}
// 实例化对象
let p1 = new People('xiaoxiao', 18)
let p2 = new People('xiaoming', 20)
console.log(p1, p2)
// People {name: 'xiaoxiao', age: 18} People {name: 'xiaoming', age: 20}

PS:构造函数的this指向是实例化出来的对象

2.动态方法在原型上定义

PS:因为把方法放在构造函数中,每次声明一个实例化对象,就会生成一个方法,这样会造成资源的浪费

// 类
function People (name, age) {
	console.log(this)
	this.name = name
	this.age = age
}
People.prototype.ShowName = function () {
	console.log('我的名字是' + this.name)
}
// 实例化对象
let p1 = new People('xiaoxiao', 18)
let p2 = new People('xiaoming', 20)
p1.ShowName()
p2.ShowName()
// 我的名字是xiaoxiao
// 我的名字是xiaoming

三、静态属性和方法

// 类
function People (name, age) {
	this.name = name
	this.age = age
	People.count++
}
// 静态属性, 定义再类上
People.count = 0
// 静态方法
People.getCount = function () {
	console.log(this)
	console.log('当前共有' + People.count + '人')
}

People.prototype.ShowName = function () {
	console.log('我的名字是' + this.name)
}
// 实例化对象
let p1 = new People('xiaoxiao', 18)
let p2 = new People('xiaoming', 20)
People.getCount()
/*
ƒ People (name, age) {
	console.log(this)
	this.name = name
	this.age = age
	People.count++
}
*/

PS: 静态方法中this,指向的是构造函数本身

四、组合继承

1. 构造函数实现继承

// 父类
function Animal (name) {
	this.name = name
}
// 动态方法
Animal.prototype.say = function () {
	console.log('你的名字是' + this.name)
}
// 子类
function Dog (name, color) {
	// 把当前Dog构造函数中this指向传递给Animal构造函数中
	// 把name参数传递过去
	Animal.call(this, name) // 继承Animal的属性
	this.color = color
}
let dog = new Dog('金毛', 'red')
console.log(dog.name)
// 金毛
console.log(dog.say())
// dog.say is not a function

缺点:只能继承父类的属性,无法继承父类的方法

2. 原型继承

function Animal (name) {
	this.name = name
}
// 动态方法
Animal.prototype.say = function () {
	console.log('你的名字是' + this.name)
}
// 子类
function Dog (name, color) {
	// 把当前Dog构造函数中this指向传递给Animal构造函数中
	// 把name参数传递过去
	Animal.call(this, name) // 继承Animal的属性
	this.color = color
}
// 原型继承
Dog.prototype = new Animal()
Dog.prototype.constuctor = Dog

let dog = new Dog('金毛', 'red')
console.log(dog.name)
// 金毛
console.log(dog.say())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帝博格T-bag

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值