一、基础知识
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);
所有的对象都有原型,当我们访问对象的属性时,JS会在原型链上从后往前寻找。
因此,如果原型链过长程序的运行速度就会变慢。
二、构造函数
构造函数实际上只是普通函数,但是在JS中可以用new来调用该函数并返回对象。
function Player(name, number) { this.name = name; this.number = number; return this; } let obj = new Player('Durant', 35);//若没有new则返回undefined
三、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());