ES6 class 类

普通使用原型添加方法

javascript 复制代码
function Animal(name) {
  this.name = name;
}

Animal.prototype.speak = function() {
  console.log(this.name + ' makes a noise.');
};

function Dog(name) {
  Animal.call(this, name);
}

Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

Dog.prototype.speak = function() {
  console.log(this.name + ' barks.');
};

const dog = new Dog('Rex');
dog.speak(); // 输出:Rex barks.

使用class添加方法

javascript 复制代码
class Animal {
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    console.log(this.name + ' makes a noise.');
  }
}

class Dog extends Animal {
  speak() {
    console.log(this.name + ' barks.');
  }
}

const dog = new Dog('Rex');
dog.speak(); // 输出:Rex barks.

对比下来,不难发现class类添加方法代码更加易懂,易读,也有好的继承特性,后续更加容易维护;

注意事项:

  1. 类并不会被提升;(意味着在代码执行之前,类声明不会被移动到作用域的顶部。这与传统的函数声明和变量声明不同,它们可以在作用域内被提升。因此,在使用类之前必须先声明类,否则会导致引用错误。)
  2. class 是一等公民(first-class);意味着它们可以像其他值一样被传递和使用。你可以将类赋值给变量,将类作为函数参数传递,从函数中返回类,以及在运行时动态地创建类。这使得类在 JavaScript 中更具灵活性,可以更方便地进行模块化和编程。
  3. 类必须在严格模式下运行,类和里面模块默认必须使用严格模式书写
相关推荐
尾善爱看海7 小时前
Vue 面试收官篇:SSR、性能优化落地、30 道高频面试题精讲(附标准答案)
前端·javascript·vue.js·面试·vue
驳是8 小时前
一个组件,提升 react-router 开发的幸福感
前端·preact
GreenTea8 小时前
OpenAI Agents API 上手实测:一次调用把整个 agent loop 甩给 OpenAI
前端·后端·算法
星云API技术支持8 小时前
企业微信二次开发:群权限设置、成员管理与群资料维护的接口组合实践
java·前端·企业微信
京东云开发者9 小时前
81.8 秒的视频,我们改了 15 个版本:一次纯 Codex 驱动的 AI-native 视频实践
前端·aigc
Csvn9 小时前
TypeScript 大型项目架构:从单体 tsconfig 到分层可扩展的工程
前端
计算机魔术师11 小时前
Dario Amodei 发文呼吁为前沿 AI 降速并提出三点计划
前端
计算机魔术师11 小时前
OpenAI的AI代理偷偷给RubyGems下毒,我们却毫无察觉
前端
甲维斯11 小时前
0代码,0建模,3句话开发一个3D游戏!
前端·游戏·游戏开发
IT_陈寒11 小时前
Vue的响应式更新把我坑惨了,原来问题出在这
前端·人工智能·后端