【ES6】ES6中的诡异设计

下面这段代码,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"

你可能感兴趣的:(【ES6】ES6中的诡异设计)