带你读《现代Javascript高级教程》七、原型和原型链(3)https://developer.aliyun.com/article/1349648?groupCode=tech_library
4.原型继承
原型继承是一种通过继承原型对象来创建新对象的方式。在 JavaScript 中,我们可以使用多种方式实现原型继承。原型继承的概念是通过将一个对象作为另一个对象的原型来实现继承,从而使新对象可以共享原型对象的属性和方法。
1) 对象字面量和 Object.create():可以使用字面量对象定义属性和方法,并使用 Object.create() 方法创建一个新对象,并将其原型设置为现有对象的原型。
var parent = { name: "Parent", sayHello: function() { console.log("Hello, I am " + this.name); }}; var child = Object.create(parent); child.name = "Child";
2) 构造函数和 Object.create():可以使用构造函数定义对象,并通过 Object.create() 方法将新对象的原型连接到现有对象的原型上。
function Parent(name) { this.name = name;} Parent.prototype.sayHello = function() { console.log("Hello, I am " + this.name);}; function Child(name) { Parent.call(this, name);} Child.prototype = Object.create(Parent.prototype);Child.prototype.constructor = Child; var child = new Child("Child");
- 构造函数和 new 关键字:可以使用构造函数创建对象实例,并使用 new 关键字进行实例化。
function Parent(name) { this.name = name;} Parent.prototype.sayHello = function() { console.log("Hello, I am " + this.name);}; function Child(name) { Parent.call(this, name);} Child.prototype = new Parent();Child.prototype.constructor = Child; var child = new Child("Child");
- 寄生组合继承
寄生组合继承是一种常用的原型继承方式,结合了构造函数继承和原型链继承的优点,避免了原型链中不必要的属性复制和方法重复定义的问题。这种方式先通过构造函数继承属性,然后通过设置原型链继承方法。
function Parent(name) { this.name = name;} Parent.prototype.sayHello = function() { console.log("Hello, I am " + this.name);}; function Child(name, age) { Parent.call(this, name); this.age = age;} Child.prototype = Object.create(Parent.prototype);Child.prototype.constructor = Child; var child = new Child("Child", 10);
以上是常用的原型继承实现方式,每种方式都有其特点和适用场景。根据具体的需求和代码结构,可以选择最适合的方式来实现原型继承。
- 参考资料
- MDN Web Docs - Object.create()open in new window
- MDN Web Docs - Inheritance and the prototype chainopen in new window
- JavaScript.info - Prototypal Inheritanceopen in new window
- Eloquent JavaScript - Object-Oriented Programming