js的继承的6种方法,Javascript的继承

 2023-09-20 阅读 23 评论 0

摘要:引用infoQ的一片文章《JavaScript的实例化与继承:请停止使用new关键字》一段话: " 传统的实例化与继承 假设我们有两个类,Class:function Class() {}和SubClass:function SubClass(){},SubClass需要继承自Class。传统方法一般是按如下步骤来组

引用infoQ的一片文章《JavaScript的实例化与继承:请停止使用new关键字》一段话:

"

传统的实例化与继承

假设我们有两个类,Class:function Class() {}SubClass:function SubClass(){},SubClass需要继承自Class。传统方法一般是按如下步骤来组织和实现的:

  • Class中被继承的属性和方法必须放在Class的prototype属性中

  • SubClass中自己的方法和属性也必须放在自己prototype属性中
  • SubClass的prototype对象的prototype(__proto__)属性必须指向的Class的prototype

"

Class中被继承的属性和方法必须放在Class的prototype属性中

// 声明一个class
function Class() {}// 给class的prototype添加一个类方法method1
Class.prototype.method1 = function() {console.log('class method1 called!');
}// 创建实例
var instance = new Class();
// 调用类方法
instance.method1();

上面的Class既声明为一个类, 并且给Class添加两个类方法,类方法也是一个Function,但不能通过Class.prototype.method的方式直接调用,但是可以通过Class.prototype.method.call的方式调用或者实例调用。

 

SubClass中自己的方法和属性也必须放在自己prototype属性中

SubClass 也是一样通过prototype来添加自己的类方法

 

SubClass的prototype对象的prototype(__proto__)属性必须指向的Class的prototype

 

function Class() {}Class.prototype.print = function(s) {console.log('class print>' + s);
}function SubClass() {
Class.call(this);
}
// 通过Object.create来实现继承 SubClass.prototype = Object.create(Class.prototype) SubClass.prototype.add = function(a, b) {return (a+b); }

// SubClass添加类成员变量
SubClass.prototype.name = 'abc';
// 创建subclass实例 var b = new SubClass();
// 调用subclass类方法 var r = b.add(1, 20);
// 调用父类Class的方法 b.print(r);

 

 

理解prototype链对实现继承很关键:

当实例b调用print方法时,先查找实例b(Object)有没有这样的function成员, 如果有则调用,没有则在SubClass的prototype(Object) 中查找,如果没有则在prototype.prototype(Object)中查找,顺着prototype链一直到找到为止,找不到就会报错。

 

上面的示例代码是实现继承的基本原理。

 

 

转载于:https://www.cnblogs.com/lovelylife/p/3724817.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/80383.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息