首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

JS 继承多种方法

一、原型链 学过java同学应该都知道,继承是java重要特点之一,许多面向对象语言都支持两种继承方式:接口继承和实现继承,接口继承继承方法签名,而实现继承继承实际方法,在js,由于函数没有签名...,融合了它们优点,现在已经成为js中最常用继承方法。...寄生式继承 寄生式继承其实和我们前面说创建对象方法寄生构造函数和工程模式很像,创建一个仅用于封装继承过程函数,该函数在内部以某种方法来增强对象,最后再返回该对象。...寄生组合式继承 组合继承js中最经常用到一种继承方法,而我们前面也已经说了组合继承缺点,组合继承需要调用两次超类型构造函数,一次是在创建子类型原型时候,另一次是在子类型构造函数内部,子类型最终会包含超类型对象全部实例属性...但是呢,使用extends实现继承时候,还是有几点需要注意问题,子类在继承父类时候,子类必须在constructor方法调用super方法,否则新建实例时会报错,这是因为子类自己this对象,

2.8K10

Js定义和继承

new per.talk = function () { console.log("我是静态方法") } // 调用静态方法 per.talk() // 通过原型链拓展属性和方法 // 原型链上属性会被多个实例共享...Person.prototype.sex = "男" Person.prototype.work = function () { console.log(this.name + "在工作") } per.work() 类继承...对象冒充继承 // 对象冒充继承 function Woman() { //对象冒充可以继承函数属性和方法,无法继承原型链上 Person.call(this) } var wom...= new Woman() wom.run() //父类函数里方法 原型链继承 // 原型链继承 function Man() {} // 原型链可以继承函数和原型链上属性和方法 Man.prototype...= new Person() var man = new Man() man.run() //父类函数里方法 man.work() //父类原型链里方法 子类给父类传参 对象冒充+原型链 function

2.3K40

JS实现继承几种方法总结

文章目录 一、基本代码 二、实现继承方法: 1.原型链继承 2.构造继承: 3.实例继承 4.拷贝继承: 5.组合继承: 6.寄生组合继承: 7.class – extends – – ES6 一...,也是父类实例 父类新增原型方法/原型属性,子类都能访问到 简单 缺点 要想为子类新增属性和方法,必须要在new Animal()这样语句之后执行,不能放到构造器 无法实现继承多个 来自原型对象所有属性被所有实例共享...(call多个父类对象) 缺点: 实例并不是父类实例,只是子类实例 只能继承父类实例属性和方法,不能继承原型属性/方法 无法实现函数复用,每个子类都有父类实例函数副本,影响性能 ---- 3.实例继承...,可以继承实例属性/方法,也可以继承原型属性/方法 既是子类实例,也是父类实例 不存在引用属性共享问题 函数可复用 可传参 缺点: 调用了俩次构造函数,生成了俩份实例(子类实例将子类原型上那份屏蔽了...) ---- 6.寄生组合继承: //核心:通过寄生方式,砍掉父类实例属性,这样,在调用俩次父类构造时候,就不会初始化俩次实例方法/属性,避免了组合继承缺点。

1.2K40

JS面试题-JS实现继承方法(共6种)

,但是问题是父类原型属性无法继承 方法二: 借助原型链 function Parent (sex) { this.name = 'zxx' this.sex = sex } Parent.prototype.test...方法五(推荐使用): 组合继承优化1(寄生组合式继承) 这种方式高效率体现它只调用了一次 Parent 构造函数,并且因此避免了在 Child.prototype 上面创建不必要、多余属性。...// super是指向父类prototype对象,即Person.prototype, // 父类方法是定义在父类原型,而属性是定义在父类对象上,所以需要把属性定义在原型上。...不过这里加了一个Object.setPrototypeOf(subClass, superClass),是用来继承父类静态方法。这也是原来继承方式疏忽掉地方。...__proto__ = superClass; } 继承最大问题在于:无法决定继承哪些属性,所有属性都得继承

69040

继承构造方法内存处理

1、继承关系内存解释 实际上在面向对象第一天讲解当中,我们对内存方面做了一些隐瞒。因为除了Object类,所有的类都是有父类。...Person(String name,int age) { this.name = name; this.age = age; } //get/set方法...北京海淀区上地7街晋福公寓"); } } 1.2、内存图 2、向上转型与向下转型内存解释 2.1、向上转型 当出现多态时,引用为Person类型,对象为Chinese对象,此时,由于Chinese包含了父类所有成员...对外表现就”像个父类对象一样”。 仅仅在调用方法时,会调用子类重写后方法。...但是,如果没有出现多态,仅仅创建父类对象(如果父类不是抽象类的话),则为父类Person引用指向Person对象,没有子类对象。

46110

JS 继承

推荐阅读JS继承相关书籍章节 《JavaScript高级程序设计第3版》第6章——面向对象程序设计 6种继承方案,分别是原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承...多重继承法 寄生继承法 构造器借用法 构造器借用与属性拷贝法 《ES6标准入门》第21章——class继承 《深入理解ES6》第9章——JavaScript类 《你不知道JavaScript》...上卷第6章——行为委托和附录A(ES6class) 总结 继承对于JS来说就是父类拥有的方法和属性、静态方法等,子类也要拥有。...子类可以利用原型链查找,也可以在子类调用父类,或者从父类拷贝一份到子类等方案。 继承方法可以有很多,重点在于必须理解并熟。 悉这些对象、原型以及构造器工作方式,剩下就简单了。...回顾寄生组合式继承,主要就是三点: 子类构造函数 proto指向父类构造器,继承父类静态方法 子类构造函数 prototype proto指向父类构造器 prototype,继承父类方法

2.9K32

(必考)js关于类(class)继承说法

考核内容: Class 继承 题发散度: ★★ 试题难度: ★★ 解题思路: Class 表达式 ES6提供了更接近传统语言写法,引入了Class(类)这个概念,作为对象模板。...使用类时要注意以下几个方面: 定义“类”方法时候,前面不需要加上function这个关键字,直接把函数定义放进去了就可以了。另外,方法之间不需要逗号分隔,加了会报错。...构造函数prototype属性,在ES6“类”上面继续存在。事实上,类所有方法都定义在类prototype属性上面。 Object.assign方法可以很方便地一次向类添加多个方法。...类内部所有定义方法,都是不可枚举(non-enumerable) 类属性名,可以采用表达式。...[methodName] constructor方法是类默认方法,通过new命令生成对象实例时,自动调用该方法

2.3K20

js 继承是什么?如何实现继承

继承含义: 继承是面向对象编程一个重要概念,通过继承可以使子类实例使用在父类定义属性和方法。...JavaScript继承是一种允许我们在已有类基础上创建新类机制;它为子类提供了灵活性,可以重用父类方法和变量。...: 不能继承原型上面的属性和方法 复制处理,相当于在子类实现了所有父类方法,影响子类性能。...这个例子效率体现在它只调用了一次父类构造函数,这很大程度上面减少创建了不必要多余属性。并且还能继承原型链上面的方法。这个方法是现在库实现方法。...其实我们知道,class语法也是由es5语法来写,其继承方法和寄生组合式继承方法一样。关于es6类,我在代码自检时候遇到两个重点,值得注意下是: 函数声明会提升,类声明不会。

1.8K40

JS进阶:继承

在理解继承之前,需要知道 js 三个东西: 什么是 JS 原型链 this 值到底是什么 JS new 到底是干什么 一、什么是 JS 原型链 我们知道 JS 有对象,比如 var obj =...缺点: 只能继承父类实例属性和方法,不能继承原型属性/方法 无法实现复用,每个子类都有父类实例函数副本,影响性能 3、组合继承 组合上述两种方法就是组合继承。...用原型链实现对原型属性和方法继承,用借用构造函数技术来实现实例属性继承。...无法传递参数 另外,ES5存在Object.create()方法,能够代替上面的object方法。...其中constructor表示构造函数,一个类只能有一个构造函数,有多个会报出SyntaxError错误,如果没有显式指定构造方法,则会添加默认 constructor方法,使用例子如下。

4.4K10

JS实现继承方式

JS实现继承方式 构造函数继承 原型继承 组合(构造函数+原型)继承 Class继承 ---- 构造函数继承 构造函数继承关键:在Child构造函数执行Parent.call(this)...this.speak = function(){ console.log("Parent speak") } } // 缺点:new多个Child时, // Parent构造函数方法会在每个...组合继承 组合继承关键: 1.属性使用构造函数继承 - 避免了原型继承Parent引用属性被所有Child实例共享缺陷。...2.方法使用过原型继承 - 避免了构造函数继承方法重复拷贝、浪费内存缺陷 function Parent(){ this.name = name; this.hobby = [];...因为子类没有自己this对象,而是继承父类this对象。如果不调用super函数,子类就得不到this对象。super()作为父类构造函数,只能出现在子类constructor()

2K20

JSindexOf方法

大家好,又见面了,我是你们朋友全栈君。 indexOf()简介 indexOf()是js内置方法之一,它功能大家都很熟悉:简单来说就是得到数据索引,对于正则不熟练的人,是个很不错方法。...) 注:(暂不讨论两个参数时(第二个参数为查询起始位置),以及lastIndexOf()) String类型使用indexOf(); StringindexOf方法 (话不多说直接上代码,不跟你多...()是对数据进行了隐式类型转换,如果参数是数值它会转换为字符来进行查询然后返回索引,本质原因是什么呢,那就是 我们js底层代码String.prototype.indexOf()使用是==进行比较判断...; Number类型IndexOf() 醒醒,Number类型哪来indexOf()方法,会直接报错好吗, 如果想对数值类型进行查询索引,可以将数值转换为字符再进行查询,方法有很多: –...()是不会进行隐式类型转换,也就是说Array.prototype.indexOf()底层代码在实现时候使用是强等于=== 严格比较; 总结 stringindexOf() 会将数值参数转换为字符再查询索引

5.2K40

JS 继承7种方法,你学会了吗?

JS 继承7种方法,你学会了吗?...重新声明父类所定义方法,无法复用。 三、组合继承 在前面两种方法,都存在着一定缺陷,所以很少会将它们单独使用。...实现方法 在组合继承方法我们 call 了一次,又 new 了一次,导致调用了2次父类,而在寄生式继承,我们可以调用 API 来实现继承父类原型 我们将两者结合在一起 不再采用 new 关键字来给改变原型...) } } 这样就实现了子类继承父类,这里关键是需要在子类 constructor 添加一个 super 关键字 需要注意是 子类constructor方法必须引用super方法,否则新建实例会报错...东西还有很多,这里就不多说了 参考文献 《JavaScript 高级程序设计》 《JavaScript常见八种继承方案》 ---- 以上就是关于 JS 实现继承 7 种方法了,当然还会有一些其他继承方法

66130

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券