共计 1205 个字符,预计需要花费 4 分钟才能阅读完成。
生成实例对象的传统方法是通过构造函数,下面是一个案例:
function Point(x, y) {
this.x = x
this.y = y
}
Point.prototype.toString = function() {return '(' + this.x + ',' + this.y + ')'
}
var p = new Point(1, 2)
弊端:和传统的面向对象语言写法差异很大,容易让刚入门的程序员产生困惑。
ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。
实例一:
class Point {constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {return '(' + this.x + ',' + this.y + ')';
}
}
好处:可以让对象原型的写法变得更清晰更像面向对象编程的语法
私有属性
es6 不支持私有属性;在属性名之前,使用 #
,为class
加了私有属性
this 的指向,类的方法内部如果含有 this,它默认指向类的实例。
实例一:
class Logger {printName(name = 'there') {this.print(`Hello ${name}`);
}
print(text) {console.log(text);
}
}
const logger = new Logger();
const {printName} = logger;
printName(); // TypeError: Cannot read property 'print' of undefined
单独使用有可能报错
constructor 方法
它是类的默认方法,一个类必须有 constructor 方法,如果没有,就会默认添加一个空的 constructor 方法。
实例一:
class Point {
}
// 等同于
class Point {constructor() {}}
他会默认添加一个 constructor 方法
css 继承
Class 可以通过 extends 关键字实现继承
class Point {
}
class ColorPoint extends Point {}
定义的类通过 extends 关键字,继承了 piont 所有属性和方法
Object.getPrototypeOf()
Object.getPrototypeOf 方法可以用来从子类上获取父类。
Object.getPrototypeOf(ColorPoint) === Point
// true
3super 关键字
super 作为函数调用时,代表父类的构造函数
class A {}
class B extends A {constructor() {super();
}
}
super 作为对象时,在普通方法中,指向父类的原型对象
class A {p() {return 2;}
}
class B extends A {constructor() {super();
console.log(super.p()); // 2
}
}
let b = new B();
正文完