interview
frontend-classic
ES5 中的类和 ES6 中的 class 有什么区别

前端经典面试题合集, ES5 中的类和 ES6 中的 class 有什么区别?

前端经典面试题合集, ES5 中的类和 ES6 中的 class 有什么区别?

QA

Step 1

Q:: ES5 中的类和 ES6 中的 class 有什么区别?

A:: ES5 中没有 class 关键字,类是通过函数构造器来实现的,通过原型链来实现继承。而在 ES6 中,引入了 class 关键字,提供了更清晰和简洁的语法来定义类。ES6 中的类是基于原型的语法糖,并没有引入新的面向对象继承模型。

Step 2

Q:: 如何在 ES5 中创建一个类?

A:: 在 ES5 中,类是通过函数构造器和原型链来创建的。例如:

function Person(name, age) { this.name = name; this.age = age; }

Person.prototype.greet = function() { console.log('Hello, ' + this.name); };

Step 3

Q:: 如何在 ES6 中创建一个类?

A:: 在 ES6 中,可以使用 class 关键字来创建类。例如:

class Person { constructor(name, age) { this.name = name; this.age = age; }

greet() { console.log('Hello, ' + this.name); } }

Step 4

Q:: ES6 中的类和传统的构造函数有什么关系?

A:: ES6 中的类实际上是构造函数的语法糖。class 关键字在背后仍然使用原型机制来创建对象,因此与传统的构造函数和原型链并没有本质上的区别。

Step 5

Q:: ES6 中如何实现类的继承?

A:: 在 ES6 中,可以使用 extends 关键字来实现类的继承。例如:

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.'); } }

Step 6

Q:: 如何在 ES5 中实现类的继承?

A:: 在 ES5 中,可以通过构造函数和原型链来实现继承。例如:

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.'); };

用途

这个内容的面试是为了测试候选人对 JavaScript 语言特性和面向对象编程的理解。在实际生产环境中,类和继承是创建复杂应用程序和组件的基础。理解 ES`5 和 ES6` 中的类机制有助于编写更清晰、可维护和可扩展的代码,尤其是在构建大型前端应用时。\n

相关问题

🦆
JavaScript 中的原型链是什么?

原型链是 JavaScript 实现继承的一种机制。每个对象都有一个内部链接到另一个对象(即原型)的引用。这个原型对象也有自己的原型,层层递进,形成一个链条。当试图访问一个对象的属性时,JavaScript 引擎会先检查对象本身是否具有该属性,如果没有,则沿着原型链向上查找,直到找到该属性或到达链的末尾。

🦆
什么是 JavaScript 闭包?

闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式是在一个函数内部定义另一个函数,并在该内部函数中引用外部函数的变量。由于 JavaScript 的函数作用域和词法作用域,这些变量会被'记住',即使外部函数已经执行完毕。

🦆
ES6 中的箭头函数和普通函数有什么区别?

箭头函数提供了一种更简洁的语法来定义函数,同时它们不会创建自己的 this 绑定,而是从外层作用域继承 this。这使得箭头函数非常适合回调函数和需要保留上下文的场景。然而,箭头函数不能用作构造函数,不能使用 arguments 对象,并且没有原型属性。

🦆
JavaScript 中的异步编程有哪些方式?

JavaScript 中的异步编程方式包括回调函数、Promise 对象、以及 ES6 引入的 async/await 语法。回调函数是最基本的异步处理方式,但容易造成'回调地狱'。Promise 提供了链式调用和错误处理的改进,而 async/await 则使得异步代码看起来更像同步代码,极大地提高了可读性和可维护性。

🦆
什么是 JavaScript 的事件循环?

事件循环是 JavaScript 处理异步操作的一种机制。JavaScript 是单线程的,事件循环允许它在等待异步任务(如 I/O 操作或定时器)完成的同时继续执行其他代码。事件循环不断检查任务队列,如果主线程空闲,会从队列中取出最早的任务执行。这种机制确保了 JavaScript 可以处理大量的异步操作而不阻塞主线程。