📜  JavaScript中组合和继承的区别(1)

📅  最后修改于: 2023-12-03 14:42:41.086000             🧑  作者: Mango

JavaScript中组合和继承的区别

在JavaScript中,组合和继承是常见的面向对象编程技巧。本文将介绍组合和继承的区别,帮助程序员更好地使用这两种技巧。

组合

组合是指创建一个新的对象,将多个其他对象整合进来。这个新的对象拥有其他对象的属性和方法,可以使用它们来实现自己的功能。组合通常使用构造函数和原型来实现。以下是一个使用组合的示例代码:

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

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

Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;

Student.prototype.sayHello = function() {
  console.log(`Hello, my name is ${this.name}, I am ${this.age} years old, and I am in grade ${this.grade}`);
};

const student = new Student('Tom', 18, 12);
student.sayHello(); // Hello, my name is Tom, I am 18 years old, and I am in grade 12

上述代码中,Person是一个构造函数,用来创建包含姓名和年龄属性的人员对象。Student是另一个构造函数,使用Person.call(this, name, age)调用Person构造函数,并添加自己的属性grade。通过Student.prototype = Object.create(Person.prototype)Student.prototype.constructor = Student语句,Student对象获得了Person对象的属性和方法。

继承

继承是指使用已有的对象作为新对象的基础,新对象可以使用原有对象的属性和方法,同时还可以添加自己的属性和方法。在JavaScript中,继承通常使用原型链来实现。以下是一个使用继承的示例代码:

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

Person.prototype.sayHello = function() {
  console.log(`Hello, my name is ${this.name}, I am ${this.age} years old`);
};

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

Student.prototype = new Person();
Student.prototype.constructor = Student;

Student.prototype.sayHello = function() {
  console.log(`Hello, my name is ${this.name}, I am ${this.age} years old, and I am in grade ${this.grade}`);
};

const student = new Student('Tom', 18, 12);
student.sayHello(); // Hello, my name is Tom, I am 18 years old, and I am in grade 12

上述代码中,Person是一个构造函数,用来创建包含姓名和年龄属性的人员对象,并添加了sayHello方法。Student是另一个构造函数,向其对象添加了grade属性,并重写了sayHello方法。通过Student.prototype = new Person()语句,Student对象获得了Person对象的属性和方法。

区别

组合和继承的区别在于对原有对象的使用方式不同。

组合方式创建了新的对象,并将已有对象的属性和方法加入其中,新对象具有相同的地位,调用时通过新对象来使用已有对象的方法。组合方式灵活,可以让对象具有多样性,增强对象集成时的灵活性和可扩展性。

继承方式则是以已有对象为基础,新对象是在已有对象的基础上扩展而来的,使用时要以原有对象的属性和方法为基础进行使用。继承具有可维护性,新对象的属性、方法与原对象有关联,代码结构清晰,易于维护。

总结

本文介绍了JavaScript中组合和继承的区别。组合和继承是常用的面向对象编程技巧,开发人员应根据需求选择不同的技巧。组合方式很灵活,可以增强对象的多样性和可扩展性;继承方式则具有可维护性,代码结构清晰易于维护。