首页
学习
活动
专区
工具
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.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

前端面试 【JavaScript】— JS如何实现继承

4] // console.log(s2.play); // [1, 2, 3] 之前的问题都得以解决,但是这里又徒增了一个新问题,那就是Parent的构造函数会多执行了一次,这是我们不愿看到的,那么如何解决这个问题...答案是用来继承父类的静态方法,这也是原来的继承方式疏忽掉的地方。 追问:面向对象的设计一定是好的设计吗?...console.log("听音乐") } addOil(){ console.log("加油") } } class otherCar extends Car{} 现在可以实现车的功能...也就是说加油这个方法,我现在是不需要的,但是由于继承的原因,也给到子类了。 继承的最大问题在于:无法决定继承哪些属性,所有属性都得继承。...那如何来解决继承的诸多问题呢? 用组合,这也是当今编程语法发展的趋势,比如golang完全采用的是面向组合的设计方式。

73220

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){...父类新增原型方法与属性,子类都能访问到 不足 不能继承父构造函数的实例对象的成员 所有子类实例都会共享父类的原型对象的属性 组合继承 组合原型链继承和借用构造函数继承,结合了两种模式的优点,传参和复用

2K20

js实现继承的几种方式

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

1.4K20

Go 如何实现继承

可以看到,Cat 结构体本身没有 Name 字段,也没有去实现 Eat() 方法。唯一有的就是匿名嵌套的方式继承了 Animal 父类,至此,我们证明了 Go 通过匿名嵌套的方式实现继承。...++ 和 Java, Go 的继承机制的作用是非常有限的,因为没有抽象方法,有很多的设计方案可以在 C++ 和 Java 轻松实现,但是 Go 的继承却不能完成同样的工作。...运行输出: Hachiko my name is Hachiko and my gender is male my name is Hachiko and my gender is male 注意:Go 某个类型需要实现接口中的所有方法才算作实现了接口...参考文献 [1] 掘金.两分钟让你明白Go如何继承 [2] The Go Programming Language Specification.Struct types [3] Hackthology.Golang...的面向对象继承

3.6K20

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 中常见的几种继承方式,同时简要它们的优缺点。 实现继承的方法 ?...实现继承的方法共有 7 种,这 7 种方法并不是互相独立的,它们之间更像是一种互补或者增强的关系。...Class extends 继承是 ES6 的,本质上是寄生组合式继承的一种运用 下面的示例,SuperType 表示父类,SubType 表示继承父类的子类。...所以,利用寄生组合式继承,我们可以做到只调用一次父类构造函数。 假设我们现在有一个父类,然后需要实现一个继承父类的子类。...在具体实现,我们不再像原型链继承或者组合继承那样,new 一个父类构造函数作为子类的原型 —— 虽然效果看起来一样,但这是一次多余的、应该避免的父类调用。

1.4K20

JavaScript如何优雅实现继承

二、原型链继承 众所周知,JavaScript 是一门基于原型的语言,在 JavaScript prototype 对象的任何属性和方法都被传递给那个类的所有实例。...原型链利用这种功能来实现继承机制: ? 注意:调用 Parent 的构造函数,没有给它传递参数。这在原型链是标准做法。要确保构造函数没有任何参数。...三、使用 call 或 applay 方法 这个方法是与对象冒充方法最相似的方法,因为它也是通过改变了 this 的指向而实现继承: ?...如何选择呢?答案很简单,两者都用。 在 JavaScript 创建类的最好方式是用构造函数定义属性,用原型定义方法。这种方式同样适用于继承机制: ?...六、extends 关键字实现继承 这个是 ES6 的语法糖,下面看下es6实现继承的方法: ?

49120

JS进阶:继承

在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的new 到底是干什么的 一、什么是 JS 原型链 我们知道 JS 有对象,比如 var obj =...先看 func(p1, p2) 的 this 如何确定: // 当你写下面代码时 function func(){ console.log(this) } func() // 等价于 function...缺点: 只能继承父类的实例属性和方法,不能继承原型属性/方法 无法实现复用,每个子类都有父类实例函数的副本,影响性能 3、组合继承 组合上述两种方法就是组合继承。...用原型链实现对原型属性和方法的继承,用借用构造函数技术来实现实例属性的继承。...8、ES6类继承extends extends关键字主要用于类声明或者类表达式,以创建一个类,该类是另一个类的子类。

4.4K10
领券