// 通过构造函数生成实例对象
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 Point {
constructor(x,y){
this.x = x
this.y = y
}
toString() {
return '(' + this.x + ',' + this.y + ')'
}
}
ES6 中的 class 定义了一个类,里面有一个 constructor() 方法,就是构造方法,this 代表实例对象。类的数据类型就是函数,类本身就指向构造函数。构造函数的 prototype 依旧存在,类上的所有方法都是定义在类的 prototype 属性上,因此在类的实例上面调用方法,就是调用原型上的方法。
类的方法都定义在 prototype 上,所以类的新方法可以添加在 prototype 对象上,Object.assgin() 方法可以很方便的一次向类添加多个方法
class Point {
constructor(){
}
}
Object.assgin(Point.prototype,{
toString(){},
toValue(){}
})
prototype 对象的 constuctor 属性,指向类本身。类的内部定义的方法是不可枚举的
Point.prototype.constructor === Point
constructor方法
constructor() 方法是类的默认方法,通过 new 生成对象实例时,自动调用该方法。一个类必须有构造方法,如果没有显示定义,一个空的 constructor 会被默认添加。
class Point {
}
// 等同于
class Point {
constructor() {}
}
constructor() 方法默认返回实例对象(即this ),类必须使用 new 调用,否则会报错
类的实例
类的所有实例共享一个原型对象。可以通过实例的 _ proto_ 属性为类添加方法
本文介绍了如何通过构造函数创建对象实例,对比了ES5的传统方式和ES6的class语法。重点讲解了类的构造方法(constructor)、prototype的使用以及类的实例共享原型。同时,展示了如何利用Object.assign为类添加新方法。
2209

被折叠的 条评论
为什么被折叠?



