javascript中class知识点整理

es6中引入class的概念 通过class可以定义为类 类的本质还是一个函数,是构造函数的另一种写法
实现面对对象编程

function Person1() { }
class Person2 { }
console.log(typeof Person1, typeof Person2) 
//function,function

es5 function写法

function Person3(name, age) {
    this.name = name;
    this.age = age;
}
Person3.prototype.say = function () {
    return '我叫' + this.name + '今年' + this.age + '岁'
}
var p1 = new Person3('张三', 18);
console.log(p1.say());

es6 class写法

class Person4 { //不存在变量提升,必须先声明后使用
    constructor(name, age) { //this指向实例对象
        this.name = name;
        this.age = age;
    }
    say() { //类的所有方法都在类的prototype上
        return '我叫' + this.name + '今年' + this.age + '岁'
    }
}
let p2 = new Person4('李四', 12);
let p3 = new Person4('王五', 24);
console.log(p2.say === p3.say, p2.say())

constructor

constructor 方法是类的构造方法
1.是一个默认方法,通过new命令创建该对象实例时,自动调用该方法
2.this是实例对象
3.一个类必须得有constructor方法,如果没有显示定义,会默认添加一个constructor
4.在constructor中调用类的原型方法, 一种是直接调用 另一种是通过回调调用原型方法 需要利用bind确定this

class Person5 {
    constructor(name) {
        this.name = name;
        this.say();
        setTimeout(function(){this.say()}.bind(this),1000)
        setTimeout(()=>{this.say()},2000)

    }
    say() {
        console.log(this.name)
    }
}
let p5 = new Person5('孙六');

get set 关键字

在class内部 可以使用get和set关键字,对某个属性设置存值函数setter和取值函数getter

class Person6 {
    constructor(name) {
        this._name = name;
    }
    get name() {
        return this._name
    }
    set name(name) {
        this._name = name;
    }
}
let p6 = new Person6('p6');
console.log(p6.name);
p6.setName = 'aaaaa';
console.log(p6.name, p6.getName);

静态方法和属性

类是实例的原型,所有类的方法都会被实例继承,但在方法和属性前面加一个关键字static,就代表该方法为一个静态方法
静态方法不会被实例继承,而是通过类直接调用

class Person7 {
    constructor() { }
    static say() {
        console.log('hello,world')
    }
}
let p7 = new Person7();
Person7.say() //hello,world
//p7.say() 报错

继承 extends

class的继承是通过extends关键字实现的;
在子构造函数中,使用this前必须先用super,否则会报错;
es6的继承机制 先创建父类的实例对象,然后再构建子类的实例,在修改父类中的this指向。

class Animal {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }
    say(){
        console.log(`say${this.name}say${this.age}`)
    }
}
class Dog extends Animal{
    constructor(name,age,color){
        super(name,age);
        this.color = color;
    }
    sayColor(){
        console.log(`say${this.color} + ${this.name} + ${this.age}`)
    }
}
let dog = new Dog('富贵','3','white');
dog.say();
dog.sayColor();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值