首页
学习
活动
专区
工具
TVP
发布

js实现继承

js实现继承 经典继承(原型链) 缺点:过多的继承了没用的属性 Grandfather.prototype.lastName = 'zhang' function Grandfather() {...father function Son() { this.hobby = 'game' } var son = new Son() console.log(son); ​ son只想要继承...grandfather的lastName属性,但是由于原型链的关系,造成了son既会继承grandfather自神的东西,grandfather的原型的东西,father自身的东西和father原型上的东西...,造成了不必要的继承 共享原型 本质:重写原型对象 优点:只会继承父的原型,不会继承父原本自带的属性或方法(只有调用new Father()才会继承自身的东西) 缺点:给本身的原型添加属性或方法时,会把继承的那个原型也修改了...) 雏形 本质:重写原型对象 优点:只会继承父的原型,不会继承父原本自带的属性或方法(只有调用new Father()才会继承自身的东西) 缺点:1,这样继承后即使修改了son的原型也不会修改father

5.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

JS实现继承的方式

JS实现继承的方式 构造函数继承 原型继承 组合(构造函数+原型)继承 Class继承 ---- 构造函数继承 构造函数继承的关键:在Child构造函数执行Parent.call(this)...组合继承 组合继承的关键: 1.属性使用构造函数继承 - 避免了原型继承Parent引用属性被所有Child实例共享的缺陷。...对于组合继承代码的Child.Prototype = Object.create(Parent.prototype),还有两种常见的类似写法是Child.prototype = Parent.prototype...Class继承 class继承用extends实现继承 class Person{ constructor(skin,language){ this.skin = skin; this.language...因为子类没有自己的this对象,而是继承父类的this对象。如果不调用super函数,子类就得不到this对象。super()作为父类的构造函数,只能出现在子类的constructor()

2K20

Js继承实现方式

Js继承实现方式 继承是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。...原型链继承 通过将子类的原型对象指向父类的实例,实现继承访问父类属性方法等 // 定义父类 function Parent(){ this.name = "parent"; this.say...,实例是子类的实例,也是父类的实例 子类实例可以继承父类构造函数属性和方法、父类原型属性和方法 不足 无法实现继承 子类实例化时无法向父类的构造函数传参 所有子类实例都会共享父类的原型对象的属性 构造函数继承...实例是父类的实例,不是子类的实例 同样也是将父类的成员与方法做了实例化拷贝 拷贝继承 通过直接将父类的属性拷贝到子类的原型实现继承 // 定义父类 function Parent(from){...父类新增原型方法与属性,子类都能访问到 不足 不能继承父构造函数的实例对象的成员 所有子类实例都会共享父类的原型对象的属性 组合继承 组合原型链继承和借用构造函数继承,结合了两种模式的优点,传参和复用

1.9K20

js实现继承的几种方式

js作为一个面向对象的弱类型语言,继承也是其非常强大的特性之一。一般情况下会出现下面的6继承方式。...,也是父类的实例 父类新增原型方法/原型属性,子类都能访问到 简单,易于实现 缺点: 可以在Cat构造函数,为Cat实例增加实例属性。...无法实现继承 来自原型对象的引用属性是所有实例共享的 创建子类实例时,无法向父类构造函数传参 2、构造继承 核心:使用父类的构造函数来增强子类实例,等于是复制父类的实例属性给子类(没用到原型) function...console.log(cat instanceof Cat); // true 特点: 解决了原型继承,子类实例共享父类引用属性的问题 创建子类实例时,可以向父类传递参数 可以实现继承(call多个父类对象...) 缺点: 实例并不是父类的实例,只是子类的实例 只能继承父类的实例属性和方法,不能继承原型属性/方法 无法实现函数复用,每个子类都有父类实例函数的副本,影响性能 3、实例继承 核心:为父类实例添加新特性

1.4K20

JS 继承

继承的相关问题,比如: ES6 的 class 继承用 ES5 如何实现。...知道了ES6 extends继承做了什么操作和设置 __proto__的知识点后,把上面 ES6例子的用 ES5就比较容易实现了,也就是说实现寄生组合式继承,简版代码就是: // ES5 实现ES6...推荐阅读JS继承相关的书籍章节 《JavaScript高级程序设计第3版》第6章——面向对象的程序设计 6种继承的方案,分别是原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承...多重继承法 寄生继承法 构造器借用法 构造器借用与属性拷贝法 《ES6标准入门》第21章——class的继承 《深入理解ES6》第9章——JavaScript的类 《你不知道的JavaScript》...上卷第6章——行为委托和附录A(ES6的class) 总结 继承对于JS来说就是父类拥有的方法和属性、静态方法等,子类也要拥有。

2.8K32

JS进阶:继承

在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的new 到底是干什么的 一、什么是 JS 原型链 我们知道 JS 有对象,比如 var obj =...缺点: 只能继承父类的实例属性和方法,不能继承原型属性/方法 无法实现复用,每个子类都有父类实例函数的副本,影响性能 3、组合继承 组合上述两种方法就是组合继承。...用原型链实现对原型属性和方法的继承,用借用构造函数技术来实现实例属性的继承。...无法传递参数 6、寄生组合式继承 结合借用构造函数传递参数和寄生模式实现继承 function inheritPrototype(subType, superType){ var prototype...8、ES6类继承extends extends关键字主要用于类声明或者类表达式,以创建一个类,该类是另一个类的子类。

4.3K10

jsclass的继承的基础用法

在es6class可通过关键词extends来实现继承,es5则是修改原型链来实现继承的。...有一个注意点:就是子类在constructor方法调用super,super就是父类的构造函数,我们必须先构造父类,才能使用子类。...这个函数,他使用了父类的sky属性,注意在子类使用父类的属性时,只能使用this来调用,使用super是找不到的,因为class的属性都是实例属性。...es5继承 es5继承则是让某个构造函数的原型对象等于另一个类型的实例,这样实现继承。...相比之下,es6的继承肯定更清晰,而且更方便,不过es6的继承也是通过原型来操作的,只是给我们封装了。 如无作者授权,请勿转载。

4.2K10

使用Node.js Addon实现继承

本文介绍一下如何实现这种映射(不确定是否能满足这位同学的需求)。 下面我们看一下Addon的实现。会涉及到V8的一些使用,可以先阅读该文章《一段js理解nodejsjs调用c++/c的过程》。...提供的ObjectWrap类实现了Wrap和UnWrap的功能,所以我们可以继承它简化封包解包的逻辑。...实现代码分析完了,我们看到把C++类映射到JS的方式有两种,第一种就是两个C++ 类没有继承关系,通过V8的继承API实现两个JS层存在继承关系的类(函数),比如print函数的实现,我们看到子类没有实现...第二种就是两个存在继承关系的C++类,同样先通过V8的API实现两个继承的类导出到JS使用,因为JS层使用的只是壳子,具体执行到C++代码的时候,我们再体现出这种继承关系。...后记:在JS实现继承是简单的,但是在底层实现起来还是比较复杂的,但是从代码设计的角度来看是非常有必要的。

1.9K30

JS实现继承的几种方法总结

文章目录 一、基本代码 二、实现继承的方法: 1.原型链继承 2.构造继承: 3.实例继承 4.拷贝继承: 5.组合继承: 6.寄生组合继承: 7.class – extends – – ES6 一...原型上面的方法: Animal.prototype.eat = function(food) { console.log(this.name + '正在吃:' + food); } ---- 二、实现继承的方法...,也是父类的实例 父类新增原型方法/原型属性,子类都能访问的到 简单 缺点 要想为子类新增属性和方法,必须要在new Animal()这样的语句之后执行,不能放到构造器 无法实现继承多个 来自原型对象的所有属性被所有实例共享...console.log(cat instanceof Animal); //false console.log(cat instanceof Cat); //true 特点: 创建子类实例时,可以向父类传递参数 可以实现继承...(call多个父类对象) 缺点: 实例并不是父类的实例,只是子类的实例 只能继承父类的实例属性和方法,不能继承原型属性/方法 无法实现函数复用,每个子类都有父类实例函数的副本,影响性能 ---- 3.实例继承

1.1K40

JS 对象的简单创建和继承

: 可以通过原型继承创建一个新对象 以下函数inherit() 返回一个继承自原型对象p的属性的新对象 function inherit(p){ if(p == null){ // 不能从...f.prototype = p; //原型指向要继承的对象p return new f(); //创建f对象,此对象继承自p } var obj = {x:1}; var obj1...f.prototype = p; //原型指向要继承的对象p return new f(); //创建f对象,此对象继承自p } var o = {}; //o 继承Object.prototype...= 3; console.log(q.x+q.y == q.z);//true 对象属性相关操作涉及到了原型链的规则 值得注意的是:它总是在原始对象上创建属性或对已有的属性赋值,而不会去修改原型链;在JS...,只有在查询属性时才会体会到继承的存在,而设置属性则和继承无关。

2.8K20

JS原型继承和类式继承

类式继承(构造函数) JS其实是没有类的概念的,所谓的类也是模拟出来的。特别是当我们是用new 关键字的时候,就使得“类”的概念就越像其他语言中的类了。...它有别于类继承是因为继承不在对象本身,而在对象的原型上(prototype)。每一个对象都有原型,在浏览器它体现在一个隐藏的__proto__属性上。在一些现代浏览器你可以更改它们。...我们说的原型继承,就是将父对像的方法给子类的原型。子类的构造函数不拥有这些方法和属性。...child.prototype = new father(); var man = new child(); man.a(); 可以看到第七行实现了原型继承。...从这里,我们也可以看到类继承和原型基础的一些区别。 结论 原型继承比较符合js这种语言的特点。因为它本身就是js强大的原型的一部分。

3.4K90

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券