类
在ES6中,class (类)作为对象的模板被引入,可以通过 class 关键字定义类。class 的本质是 function。
它可以看作一个语法糖,让对象原型的写法更加清晰、更像面向对象编程的语法。
类的一个简单例子
class MyClass {
constructor(str){
this.str = str
}
test(){
console.log('this的指向',this);
}
}
const obj = new MyClass("我是类的实例对象");
obj.test();
运行结果
this指向的说明
- constructor中的this
类中构造器constructor内的关键词this指向的是该类的实例对象。
- test中的this
this的指向取决于调用时的方式。
上述例子中test方法是通过实例对象调用的,因此this指向的是obj,即MyClass类的实例对象。
类的方法中的this指向
举例
class MyClass {
constructor(str){
this.str = str
}
test(){
console.log('this的指向',this);
}
}
const obj = new MyClass("我是类的实例对象");
obj.test();
const fun = obj.test; //将obj对象的test方法赋值给fun变量
fun(); //全局调用fun方法
运行结果
说明
类中的方法局部默认开启了严格模式,虽然fun方法是全局调用的,但是this不再指向window,而是undefined。
相当于如下demo函数的写法:
function demo1(){
console.log("this指向:",this);//window
}
demo1();
function demo(){
"use strict"
console.log("this指向:",this);//undefined
}
demo();