JS笔记:面向对象

一、基础知识

JS不区分类和实例,而是通过原型来实现面向对象编程。

JS的原型链和Java的类不同的是,所有的对象都是实例。继承只是将另一个对象作为原型而已。

//原型对象
let Player = {
    name: "Curry",
    number: 30
};

function createPlayer(name, number) {
    //基于原型创建新对象
    let obj = Object.create(Player);
    //初始化新对象
    obj.name = name;
    obj.number = number;
    return obj;
}

let obj = createPlayer('Durant', 35);
alert(obj.name + ' #' + obj.number);
View Code

所有的对象都有原型,当我们访问对象的属性时,JS会在原型链上从后往前寻找。

因此,如果原型链过长程序的运行速度就会变慢。

二、构造函数

构造函数实际上只是普通函数,但是在JS中可以用new来调用该函数并返回对象。

function Player(name, number) {
    this.name = name;
    this.number = number;
    return this;
}

let obj = new Player('Durant', 35);//若没有new则返回undefined
View Code

三、class

JS的对象模型基于原型时间,优点是简单,缺点是继承的实现需要编写大量代码并正确实现原型链。新的关键字class自ES6开始正式加入JS,其目的就是让类的定义和继承变得简单。

class Student {
    constructor(name, number) {
        this.name = name;
        this.number = number;
    }

    information() {
        return this.name + " #" + this.number;
    }
}

class CollegeStudent extends Student {
    constructor(name, number, school) {
        super(name, number);
        this.school = school;
    }

    information() {
        return super.information() + " " + this.school;
    }
}

let student = new CollegeStudent('Yao', '1200300456', 'GuiLin University of Electronic Technology');
alert(student.information());
View Code

猜你喜欢

转载自www.cnblogs.com/arseneyao/p/8922368.html