首页 > 试题广场 >

说一说js继承的方法和优缺点?

[问答题]
说一说js继承的方法和优缺点?
https://www.cnblogs.com/wrhbk/p/14477637.html
发表于 2022-05-26 14:53:59 回复(0)
1、原型链继承 --- 优点:写法简单、容易理解。缺点:①引用类型的值会被所有实例共享;②在子类实例对象创建时,不能向父类传参;2、借用构造函数继承 --- 优点:①避免了引用类型的值会被所有实例共享;②在子类实例对象创建时,可以向父类传参;缺点:方法在构造函数中,每次创建实例对象时都会重新创建一遍方法;3、组合继承 --- 融合原型链和借用构造函数的优点,是js中最常用的继承方式;缺点:无论什么情况下,父类构造函数都会被调用两次,一是创建子类原型对象时,二是子类构造函数内部。4、原型式继承 --- 优点:不需要单独创建构造函数;缺点:引用类型的值会被所有实例共享。5、寄生式继承 --- 优点:不需要单独创建构造函数;缺点:方法在构造函数中,每次创建实例对象时都会重新创建一遍。6、寄生组合继承 --- 优点:高效率只调用一次父类构造函数,并且避免了子类原型对象上不必要、多余的属性,同时,还能将原型链保持不变,因此能使用instanceof 和 isPrototypeOf。缺点:代码复杂
发表于 2022-07-26 15:59:27 回复(0)
1、原型链继承-缺点:父类的引用类型数据被所有子类共享,更改一个子类的数据,其他数据会受到影响,一起改变;子类实例不能向父类构造函数传参。2、借用构造函数的继承-优点:父类的引用类型数据不会被子类共享。缺点:子类不能访问父类原型属性的上的方法和参数。3、组合继承-优点:父类可以复用,父类构造函数中的引用类型数据不会被共享。缺点:会调用两次父类的构造函数,会有两份一样的属性和方***影响性能。4、寄生组合继承(目前推荐的最优的方法之一)-优点:解决组合继承调用两次父类构造函数的缺点。5、class继承extends,也是目前推荐的最优方法之一。
发表于 2022-07-27 09:01:32 回复(0)
- 一、原型链继承 - 缺点: - 1.引用类型的属性被所有实例共享 - 2.在创建 Child 的实例时,不能向 Parent 传参 - 二、借用构造函数(经典继承) - 优点: - 1.避免了引用类型的属性被所有实例共享 - 2.可以在 Child 中向 Parent 传参 - 缺点: - 1.方法都在构造函数中定义,每次创建实例都会创建一遍方法。 - 三、组合继承 - 优点: - 1.融合原型链继承和构造函数的优点,是 JavaScript 中最常用的继承模式。 - 四、原型式继承 - 缺点: - 1.包含引用类型的属性值始终都会共享相应的值,这点跟原型链继承一样。 - 五、寄生式继承 - 缺点: - 1.跟借用构造函数模式一样,每次创建对象都会创建一遍方法。 - 六、寄生组合式继承 - 优点: - 1.这种方式的高效率体现它只调用了一次 Parent 构造函数,并且因此避免了在 Parent.prototype 上面创建不必要的、多余的属性。 - 2.与此同时,原型链还能保持不变; - 3.因此,还能够正常使用 instanceof 和 isPrototypeOf。
发表于 2022-05-23 10:12:28 回复(0)
1.原型式继承 缺点:通过一个实例修改属性,另一个实例的属性也会被修改 2.构造器 继承 优点:改变属性,另一个实例的属性不会被改变 缺点:多创建了一个函数 3.原型+构造器。比较常用,构造器继承属性,通过原型继承方法 4.寄生式继承 传入一个对象,在函数内复制出一个新的对象,将要增加的属性添加到新的对象上,并返回该对象
发表于 2022-08-22 16:04:37 回复(0)
https://www.cnblogs.com/wrhbk/p/14477637.html
发表于 2022-06-11 17:05:29 回复(0)
1.原型链继承,优点:简单实现继承,缺点:所有实例共享原型对象的属性和方法,且无法进行参数的传递 2.构造函数继承,优点:避免了原型对象的属性和方法被实例共享,且可以传递参数 缺点:每次创建实例都需要创建一遍方法 3.组合继承,优点:结合原型链继承和构造函数继承的优点 缺点:无论什么情况下,都会调用两次父级构造函数,一次在创建子级原型的时候,另一次在子级构造函数内部 4.原型式继承,优点:不需要单独创建构造函数 缺点:和原型链继承相似 5.寄生式继承,优点:不改变父类的情况下,增强对象 缺点:和构造函数继承相似 6.寄生组合式继承,优点:结合组合继承和寄生式继承的优点,不需要调用两次父级构造函数 缺点:代码复杂
发表于 2023-10-08 19:45:57 回复(0)
【原型链继承】通过将子类的原型对象指向父类的实例,实现继承访问父类属性方法等。
缺点:
- 子类实例化时无法向父类的构造函数传参。
- 所有子类实例都会共享父类的原型对象中的属性。
- 无法实现多继承。

【构造器函数继承】当子类构造函数被调用时,借助call或者apply调用父类构造方法实现对于this的拓展。
优点:
- 子类实例不会共享父类属性方法。
- 实例化子类时可以向父类构造函数传参。
- 通过调用多个父类构造函数可以实现多继承。
缺点:
- 只继承了父类的构造函数的属性和方法,没有继承父类原型的属性和方法。
- 每个子类都有父类实例函数的副本,拷贝了父类函数而不是引用,影响性能。
- 实例并不是父类的实例,只是子类的实例。

【原型式继承】通过共享原型对象实现继承。
优点:
- 实现了方法与属性的复用。
- 父类新增原型方法与属性,子类都能访问到。
缺点:
- 不能继承父构造函数的实例对象的成员。
- 所有子类实例都会共享父类的原型对象中的属性。

【组合继承】组合原型链继承和借用构造函数继承,结合了两种模式的优点,传参和复用。
优点:
- 原型方法可以复用。
- 既是子类的实例,也是父类的实例。
- 实例化子类时可以向父类构造函数传参。
- 可以继承实例属性和方法,也可以继承原型属性和方法。
缺点:
- 调用了两次父类构造函数,生成了两份实例,子类的构造函数的拷贝会代替原型上的父类构造函数的实例。

【寄生组合继承】通过寄生方式,砍掉父类的实例属性,在调用两次父类的构造的时候,就不会初始化两次实例方法和属性,避免的组合继承的缺点。
优点:
- 这种方式的高效率体现它只调用了一次 Parent 构造函数,并且因此避免了在 Parent.prototype 上面创建不必要的、多余的属性。
- 与此同时,原型链还能保持不变,还能够正常使用 instanceof 和 isPrototypeOf。
缺点:
- 相对比较复杂。


其他

【实例继承】为父类实例增加成员与方法,作为实例返回。
优点:
- 实例化子类时可以向父类构造函数传参。
- 子类的实例化方式可以为new Child()或直接调用Child()。
缺点:
- 不支持多继承。
- 实例是父类的实例,不是子类的实例。
- 同样也是将父类的成员与方法做了实例化拷贝。

【拷贝继承】通过直接将父类的属性拷贝到子类的原型中实现继承。
优点:
- 支持多继承。
- 实例化子类时可以向父类构造函数传参。
缺点:
- 无法获取父类不可枚举的方法。
- 同样也是将父类的成员与方法做了实例化并拷贝。
发表于 2023-01-07 13:16:26 回复(0)
原型链继承、借用构造函数继承、组合继承(融合原型链和构造函数)原型链继承的缺点:1.引用类型的属性被所有实例共享。2:在创建子类时不能向Parent中传递参数。借用构造函数继承有点:避免了引用类型的属性被所有的实例共享。可以在创建子类时向parent中传递参数。缺点:1.方法都在都在构造函数中定义,每次创建实例都会创建一次方法,浪费资源。组合继承:融合原型链继承和构造函数继承的优点。
发表于 2022-08-04 10:33:28 回复(0)
原型链继承---优点:写法简单,容易理解。缺点:引用类型的值会被所有实例共享。在子类实例对象创建时,不能向父类传参。 借用构造函数继承---优点:避免了引用类型的值会被所有实例共享。在子类实例创建时可以向父类传参。缺点:方法在构造函数中,没次创建实例对象时都要从新创建一边方法。 组合继承--融合了原型链和借用构造函数的优点,是js中最常用的继承方式。缺点:无论什么情况下父类构造函数都会调用两次。 一是创建子类原型对象时,二是子类构造函数内部。 原型式继承--优点:不需要单独创建构造函数。缺点:引用类型的值会被所有实例共享。 寄生式集成--优点:不需要单独创建构造函数。缺点:方法在构造函数中,没次创建实例对象时都会重新创建一遍。 寄生组合继承--优点:高效率只调用一次父类构造函数,并且避免了子类原型对象上不必要、多余的属性,同时还能将原型链保持不变,因此能使用instanceof和isPrototypeOf。缺点:代码复杂。
发表于 2023-07-26 17:43:31 回复(0)
1.原型链继承,优点:简单实现继承,缺点:所有实例共享原型对象的属性和方法,且无法进行参数的传递 2.构造函数继承,优点:避免了原型对象的属性和方法被实例共享,且可以传递参数 缺点:每次创建实例都需要创建一遍方法 3.组合继承,优点:结合原型链继承和构造函数继承的优点 😊缺点:无论什么情况下,都会调用两次父级构造函数,一次在创建子级原型的时候,另一次在子级构造函数内部 4.原型式继承,优点:不需要单独创建构造函数 缺点:和原型链继承相似 5.寄生式继承,优点:不改变父类的情况下,增强对象 缺点:和构造函数继承相似 6、寄生组合式继承,使用原型链继承和构造函数继承以及寄生式继承(父类的副本),优:避免组合式继承调用两次父级构造函数的问题 6.寄生组合式继承,优点:结合组合继承和寄生式继承的优点,不需要调用两次父级构造函数 缺点:代码复杂
编辑于 2024-04-11 11:39:28 回复(0)
继承的方法有两种 1.函数式继承 function Parent() { } function Son(..args){ parent.call(this,...args) } Son.prototype = Object.create(parent) Son.prototype.constructor = Son 优点:兼容性好 缺点:写法优点复杂 2.class extends ,es6 新增方法 优点:简单方便 缺点:兼容性会差一些
发表于 2024-03-12 12:01:11 回复(0)
方法: ①原型链继承。优点:简洁清晰易理解。缺点:引用类型的值会被所有实例共享;不能向父类传参。 ②构造函数继承。优点:避免共享所有的值,可以向父类传参。缺点:每次创建实例对象时都会重新创建一遍方法。 ③组合继承(原型+构造函数)。优点:解决了上面原型继承和构造器继承的问题,结合了原型继承和构造函数继承的优点。缺点:每次都会调用两次构造函数。 ④ES6的class的extends关键字
发表于 2023-09-25 01:11:28 回复(0)
1.原型链继承: 优点:写法简单、容易理解 缺点:①引用类型的值会被所有实例共享 ②在子类实例对象创建时,不能向父类传参 2.借用构造函数继承: 优点:①避免了引用类型的值会被所有实例共享 ②在子类实例对象创建时,可以向父类传参 缺点:方法在构造函数中,每次创建实例对象时都会重新创建一遍方法 3.组合继承: 优点:融合原型链和借用构造函数的优点,是js中最常用的继承方式 缺点:无论什么情况下,父类构造函数都会被调用两次,一是创建子类原型对象时,二是子类构造函数内部 4.原型式继承: 优点:不需要单独创建构造函数 缺点:引用类型的值会被所有实例共享 5.寄生式继承: 优点:不需要单独创建构造函数 缺点:方法在构造函数中,每次创建实例对象时都会重新创建一遍 6.寄生组合继承: 优点:高效率只调用一次父类构造函数,并且避免了子类原型上不必要、多余的属性,同时还能将原型链保持不变,因此能使用instanceof和isPrototypeOf 缺点:代码复杂
发表于 2023-09-04 18:59:13 回复(0)
1、原型链继承 2、构造函数继承 3、组合继承
发表于 2023-08-18 14:25:43 回复(0)
原型继承(不能继承父类的私有属性,只继承原型属性和方法),构造函数继承(只继承私有属性和方法),组合式继承(都继承,但会产生冗余),寄生组合式继承(最好的继承方法,)
发表于 2023-08-11 22:00:44 回复(0)
1、原型链继承:优点:简单易懂,能够继承父类的属性和方法;缺点:如果一个子类实例修改了继承的属性,会影响到其他子类实例; 2、借用构造函数继承:优点:子类实例独立拥有父类的属性,不存在共享问题;缺点:无法继承父类原型上的方法,每个子类实例都有自己的一份方法副本; 3、组合继承:优点:兼具原型链继承和构造函数继承的优点;缺点:父类构造函数会被调用两次,一次在子类原型上,一次在子类实例上,导致效率低下; 4、原型式继承:优点:简单、灵活,可以根据需要对对象进行扩展或修改;缺点:所有子类实例共享原型对象,对原型对象的修改会影响到所有子类实例; 5、寄生式继承; 6、寄生组合式继承。
发表于 2023-06-28 15:44:15 回复(0)
1.原型链的继承 优点:写法便捷,易理解。 缺点:在父类型构造函数中定义的引用类型值的实例属性,会在子类型原型上变成原型属性被所有子类型实例所共享。同时在创建子类型的实例时,不能向超类型的构造函数中传递参数。 2.借用构造函数继承:在子类型构造函数内部调用父类型构造函数 优点:解决了原型链实现继承的不能传参的问题和父类的原型共享的问题 缺点:方法都在构造函数中定义,因此无法实现函数的复用 3.组合继承:将原型链和借用构造函数的组合到一块。使用原型链实现对原型属性和方法的继承,通过借用构造函数来实现对实例属性继承。 优点:解决了原型链继承和借用构造函数继承造成的影响 缺点:无论在什么情况下,都会调用两次超类型构造函数,一次是在创建子类型的时候,一次是在子类型构造函数内部 4.原型式继承: 优点:不需要单独创建构造函数 缺点:属性中包含的引用值始终会在相关对象间共享 5.寄生式继承: 优点:写法简单,不需要单独创建构造函数 缺点:通过寄生式继承给对象添加函数会导致函数难以重用
发表于 2023-04-13 20:31:48 回复(0)
这个真没有java 继承方便
发表于 2023-03-17 21:21:00 回复(0)
1、原型链继承:缺点:父函数上所有的引用属性都被实例共享,并且不能够向父函数上传递参数。 2、借用构造函数继承:缺点:每实例化一个实例,都会重新构建一遍构造函数中的函数 3、组合继承:比较常用的继承方式,实例采用构造函数继承,方法采用原型链继承 4、原型式继承:和原型链继承有一样的缺点 5、寄生式继承:和借用构造函数有一样的缺点 6、寄生组合式继承:只会对父函数进行一次调用,且不会向父函数的原型上创建不必要的属性,不影响instanceof。
发表于 2023-03-09 11:07:28 回复(0)