看到阮一峰的es6入门里,针对class有一句话:与 ES5 一样,实例的属性除非显式定义在其本身(即定义在this对象上),否则都是定义在原型上(即定义在class上)。我测试了一下似乎并非如此
class Event {
list = []
test = function () {
console.log(this)
}
}
很明显:list 和 test 都是定义在实例上,并非原型上的
class Event {
list = []
test () {
console.log(this)
}
}
这样才是定义在prototype上
我的理解如果是表达式形式,都是定义在实例上的,函数形式都是定义在原型上的。
这句话确实以及给出的例子都会让人误解,以为是只有
class Event {
constructor() {
this.list = [];
this.test = function(params) {
console.log(this)
}
}
}
这样的形式才是定义在实例上的。
事实上第一种方式和第三种方式是完全等价的。
获取还有其他的解释,欢迎大家和我讨论。
网友评论