JavaScript继承的方法
2021/10/23 9:09:32
本文主要是介绍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继承的方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)