js中类的概念:
把具有共同性质的事务归于一类,得到一个抽象概念,就是类。
类的数据类型就是函数,类本身指向构造函数
类的写法
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return '(' + this.x + ', ' + this.y + ')';
}
}
这种新的写法,本质上与下面代码写法是一样的
构造函数的prototype属性,在es6的类中依然存在,类中的所有方法都是定义在prototype属性上的
使用类的原因:
类相当于一个语法糖,让对象原型的写法更加清晰,更像面向对象的编程
使用构造函数初始化对象的原理
-
理解new操作符:
function F(){}
new F();
过程:
创建一个空对象,作为将要返回的实例对象
将空对象的原型指向构造函数的prototype属性
将空对象赋值给构造函数内部的this关键字,也就是this会指向实例对象
开始执行函数内部代码 -
根据new操作符理解constructor初始化对象的原理:
直接对类使用new命令,跟构造函数的用法一致。
在类的实例上调用方法,实际上就是调用原型上的方法(根据上面function声明的构造函数的写法可知)。所以在实例上调用constructor 方法,实际上就是调用原型上的constructor 方法:
class B {}
const b = new B();
b.constructor === B.prototype.constructor // true
new操作符 最主要的是将this从原始函数指向实例对象,而实例对象的constructor 是等于类的原型上的constructor 。比如上面代码,此时B原型上的constructor的this,就指向实例对象b
所以构造方法的this关键字则代表实例对象。