下面这段代码,proto类里面的this,居然指向obj !!!!
原因是:所谓的super.xxx()就是个语法糖:Object.getPrototypeOf(this).xxx
四不像啊,做了个面向对象居然是四不像。而且继承关系居然是后写的,而不是直接定义出来的。也就是说,你写个代码,莫名其妙被别人继承了,然后莫名其妙你的代码的行为就超出了你的控制。
感觉所谓的ES5就是对ES5做了一层解释器语法糖,本质还是ES5,怪不得可以直接翻译成ES5的代码。所以很多特性其实也没啥。
比如加入一个特性的时候,可能造成解释器搞不清楚是哪种,就强制规定不许某种写法?
const proto = {
x: 'hello',
foo() {
console.log(this.x);
},
};
const obj = {
x: 'world',
foo() {
super.foo();
}
}
Object.setPrototypeOf(obj, proto);
obj.foo() // "world"
网友评论