Java教程

JavaScript继承的方法

本文主要是介绍JavaScript继承的方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录:

  • 原型链继承
  • 构造函数继承
  • 组合继承
  • 寄生组合继承
  • ES6继承

本文所有继承方法均是ES5及以下,ES6extends继承请看。

原型链继承

缺点:

  • 原型对象的所有方法和属性都被共享。
  • 子类方法会添加到父类
 function Animal(type, name) { //父类
 this.type = type;
 this.name = name;
 }
 Animal.prototype.Foraging = function () { //父类方法
 console.log("eating...");
 }
 function Dog(name, age) {  //子类
 this.name = name;
 this.age = age;
 }
 Dog.prototype = Animal.prototype;//继承核心
 Dog.prototype.say = function () { //子类方法
 console.log("bark....")
 }
 let dog = new Dog("Tim", 3);
 dog.Foraging(); //eating...
 console.log(Animal.prototype) //say: ƒ ()

通过将子类的原型指向了父类,因此子类将父类的所有属性和方法都作为自己共有的属性和方法。

构造函数继承:

缺点:

  • 部分继承,不能继承父类原型链上的方法和属性
 function Animal(type, name) {
 this.type = type;
 this.name = name;
 this.sleep = function () {
 console.log("sleep...");
 }
 }
 Animal.prototype.Foraging = function () {
 console.log("eating...");
 }
 function Dog(type, name, age) {
 Animal.call(this, type, name); //继承核心
 this.age = age;
 }

 Dog.prototype.say = function () {
 console.log("bark...")
 }
 
 let dog = new Dog("dog", "Tim", 3);
 dog.sleep(); //sleep...
 // dog.Foraging();//is not a function
 dog.say()//bark...

使用call方法,将父元素的this改为调用者。

组合继承(构造函数+原型链):

缺点:

  • 父元素初始化两次。
function Animal(type, name) {
 this.type = type;
 this.name = name;
 }
 Animal.prototype.Foraging = function () {
 console.log("eating...");
 }
 function Dog(type, name, age) {
 Animal.call(this, type, name); //继承核心1
 this.age = age;
 }
 Dog.prototype = new Animal(); //继承核心2
 Dog.prototype.say = function () {
 console.log("bark...")
 }
 let dog = new Dog("dog", "Tim", 3);
 dog.Foraging();//eating...
 dog.say() //bark...
 console.log(Animal.prototype)//没有say方法

使用call方法继承父类属性,使用原型链继承父类共有方法。

寄生组合继承:

 function Animal(type, name) {
 this.type = type;
 this.name = name;
 }
 Animal.prototype.Foraging = function () {
 console.log("eating...");
 }
 function Dog(type, name, age) {
 Animal.call(this, type, name);
 this.age = age;
 }
 function extend(chlid, parent) { //封装继承核心
 function Fn() { }
 Fn.prototype = parent.prototype;
 chlid.prototype = new Fn();
 }
 extend(Dog, Animal); //继承核心
 Dog.prototype.say = function () {
 console.log("bark....")
 }
 let dog = new Dog("dog", "Tim", 3);

 dog.Foraging();//eating...
 dog.say()//bark...
 console.log(Animal.prototype)//没有say方法

更多内容请看:IFTS

这篇关于JavaScript继承的方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!