继承
在 JavaScript 中,继承是实现代码重用的重要手段之一,通过继承可以让子类拥有父类的属性和方法。JavaScript 支持两种类型的继承:原型继承和类继承。
- 原型继承
原型继承是 JavaScript 中最基本的继承方式,它通过让子对象的原型指向父对象,从而实现属性和方法的继承。下面是一个使用原型继承的例子:
javascriptCopy code
// 父类
function Animal(name) {
this.name = name;
}
Animal.prototype.sayHello = function() {
console.log('Hello, my name is ' + this.name);
};
// 子类
function Dog(name) {
this.name = name;
}
Dog.prototype = new Animal();
// 测试
const dog = new Dog('Tom');
dog.sayHello(); // 输出:Hello, my name is Tom
上面的例子中,父类 Animal 定义了一个 sayHello 方法,子类 Dog 继承了 Animal 的属性和方法,通过将 Dog 的原型指向 Animal 的实例来实现继承。
- 类继承
在 ES6 中,JavaScript 引入了 class 关键字,支持类的定义和继承。使用类继承可以更方便地实现继承,下面是一个使用类继承的例子:
javascriptCopy code
// 父类
class Animal {
constructor(name) {
this.name = name;
}
sayHello() {
console.log('Hello, my name is ' + this.name);
}
}
// 子类
class Dog extends Animal {
constructor(name) {
super(name);
}
}
// 测试
const dog = new Dog('Tom');
dog.sayHello(); // 输出:Hello, my name is Tom
上面的例子中,使用 class 定义了父类 Animal 和子类 Dog,子类 Dog 继承了父类 Animal 的属性和方法,通过 extends 关键字来实现继承。
需要注意的是,虽然使用 class 关键字可以更方便地实现继承,但本质上还是使用了原型继承。子类 Dog 的原型是 Animal 的实例,子类实例的 __proto__ 属性指向子类的原型。
模块规范
JavaScript 模块规范主要有以下几种:
- CommonJS CommonJS 是一种服务器端模块规范,最初是 Node.js 所采用的模块规范,它定义了模块的定义、引入和使用方式。模块通过
module.exports导出,在其他模块中通过require引入。 - AMD AMD (Asynchronous Module Definition) 是一种异步模块规范,它主要是用于浏览器端的模块加载,支持在页面加载时异步地加载模块。AMD 规范通过
define函数定义模块,在其他模块中通过require函数异步引入。 - ES6 模块规范 ES6 模块规范是 JavaScript 新引入的模块规范,通过
import和export关键字来定义和导入模块。ES6 模块规范是静态的,编译时确定依赖关系,可以有效地解决模块化的问题。 - UMD UMD (Universal Module Definition) 是一种兼容 CommonJS 和 AMD 的模块规范,可以在浏览器端和 Node.js 中使用。UMD 规范通过判断当前环境是否支持 AMD 或 CommonJS,来决定模块的导出方式。
以上是常见的 JavaScript 模块规范,不同的模块规范适用于不同的场景。在使用模块化开发时,需要根据实际需求选择合适的模块规范。