javascript如何实现继承_es6的class语法糖背后是什么

admin 百科 11
ES6的class本质是函数和原型链的语法糖,底层仍基于原型继承;它将class编译为带内部属性的函数,extends自动设置原型链与构造函数绑定,super()确保父类初始化this,super.xxx访问父类原型方法。

javascript如何实现继承_es6的class语法糖背后是什么-第1张图片-佛山资讯网

ES6 的 class 本质是函数和原型链的语法糖,它没有引入新的面向对象机制,底层仍基于 JavaScript 原有的原型继承(prototype-based inheritance)。理解这点,就能看清 extendssuper 背后发生了什么。

class 声明最终生成的是函数

class 声明会被编译为一个具有特殊内部属性的函数(不可被当作普通函数调用,若不通过 new 会报错)。例如:

ES6 写法:

class Animal {
  constructor(name) {
    this.name = name;
  }
  speak() {
    console.log(`${this.name} makes a sound.`);
  }
}

登录后复制

等价于 ES5 函数写法:

立即学习“Java免费学习笔记(深入)”;

function Animal(name) {
  if (!(this instanceof Animal)) throw new TypeError("Class constructor Animal cannot be invoked without 'new'");
  this.name = name;
}
Animal.prototype.speak = function() {
  console.log(`${this.name} makes a sound.`);
};

登录后复制

可见,class 只是更简洁、更严格的函数 + 原型赋值封装。

extends 实际操作的是原型链和构造函数绑定

extends 并非创建新继承模型,而是自动完成三件事:

标签: javascript es6 java access speak

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~