es5、es6的类与继承
// ES5中的类与继承
// function People(name, age) { // 构造函数
// // console.log(this) // this 指向当前new出来的实例化对象
// // this.name this.age 是实例属性 实例属性是定义在构造函数里的
// this.name = name // 左边是属性 右边是形参
// this.age = age
// People.count++
// }
// // 静态属性 是直接定义在类里面的
// People.count = 0
// let p1 = new People('xiecheng', 34)
// console.log(p1)
// let p2 = new People('zhangsan', 20)
// console.log(p2)
// // 静态方法
// // 当前的方法跟具体的实例话对象是没有关系的
// // console.log(Math.max(4, 5))
// // console.log(Math.random())
// People.getCount = function() {
// // console.log(this); // 静态方法的this指向当前的构造函数
// console.log('当前共有' + People.count + '个人');
// }
// // 实例方法
// People.prototype.showName = function() {
// console.log('我的名字是' + this.name)
// }
// p1.showName()
// console.log(People.count)
// People.getCount()
// // let str = new String('hky')
// // console.log(str)
// // let arr = new Array(1, 2, 3)
// // console.log(arr)
// // let obj = new Object()
// // obj.name = 'hky'
// // console.log(obj)
//继承
// 父类
function Animal(name) {
this.name = name
}
Animal.prototype.showName = function() {
console.log('名字是' + this.name);
}
// 子类
function Dog(name, color) {
Animal.call(this, name) // 继承属性
this.color = color
}
// 原型继承 原型 + 属性继承 = 组合继承
Dog.prototype = new Animal()
Dog.prototype.constructor = Dog
let d1 = new Dog('hky', 'white')
console.log(d1);
d1.showName()
// =>单独继承属性 报错 构造函数的继承只能继承属性
// 需要与原型继承一起
//ES6
class People {
constructor(name, age) {
this.name = name
this.age = age
this._sex = -1
}
get sex() { // get 表示只读 属性
if (this._sex == 1) {
return 'male'
} else if (this._sex == 0) {
return 'female'
} else {
return 'error'
}
}
set sex(val) { // 1: male 0: female
if (val == 0 || val == 1) {
this._sex = val
}
}
showName() {
console.log(this.name)
}
static getCount() { // es6 静态方法
return 5
}
}
// 业务逻辑的操作要在set 和 get 中写 这是与直接写在constructor中的区别
let p1 = new People('张三', 35)
console.log(p1);
// p1.sex = 'female' // => 报错 get 表示只读
// p1.sex = 'female' // 要加上set
p1.sex = 1
console.log(p1.sex) // 要当成一个属性去调用
// 输出静态方法
console.log(People.getCount());
// es6暂时没有静态属性 书写方法就是es5的静态属性
People.count = 9
console.log(People.count);
// es6继承
class Coder extends People { // extends [ɪkˈstendz]
constructor(name, age, company) {
super(name, age)
this.company = company
}
showCompany() {
console.log(this.company);
}
}
let c1 = new Coder('李四', 35, 'imooc')
console.log(c1);
c1.showName()
c1.showCompany()
c1.sex = 0
console.log(c1.sex)
console.log(Coder.getCount())

浙公网安备 33010602011771号