JS继承的6种方式

JS继承:
1、原型链继承
Person.prototype = new Animal();
将父类的实例作为子类的原型。
(1)不能向构造函数传参,无法实现多继承
(2)来自原型对象的引用属性是所有实例共享的

2、构造继承
实际上使用父类的构造函数来增强子类,等于是把父类的构造函数复制给子类。
function Person(name) {
Animal.call(this);
this.name = name;
}
优点:
(1)可以向构造函数传参数
(2)可以实现多继承,多call几个
缺点:
(1)无法实现函数复用
(2)只能继承父类的属性和方法,不能继承父类的原型

3、实例继承
为父类实例添加新属性,作为子类实例返回。
function Cat(name) {
var instance = new Animal();
instance.name = name;
return instance;
}
缺点:无法实现多继承

4、拷贝继承
function Cat(name) {
var animal = new Animal();
for (var attr in animal) {
Cat.prototype[attr] = animal[attr];
}
this.name = name;
}
优点:支持多继承
缺点:占用内存高,因为要用for in循环来拷贝父类属性/方法
不可枚举方法拷贝不了

5、组合继承
通过调用父类构造函数,继承了父类的属性,并保留了传参的优点。然后再将父类实例作为子类原型,实现了函数复用。
function Cat(name) {
Animal.call(this);
this.name = name;
}
Cat.prototype = new Animal();
Cat.constructor = Cat;
优点:
(1)继承父类的属性和方法,也继承了父类的原型
(2)可传参,函数可复用
缺点:调用了两次父类构造函数

6、寄生组合继承
通过寄生的方式,去掉了父类的实例属性,在调用父类构造函数时,就不会初始化两次实例方法,避免了组合继承的缺点
function Cat(name) {
Animal.call(this);
this.name = name;
}
(function() {
var Super = function(){};
Super.prototype = Animal.prototype;
Cat.prototype = new Super();
Cat.constructor = Cat;
})();

原文地址:https://www.cnblogs.com/SUHONG/p/8777853.html

时间: 2024-10-12 04:37:33

JS继承的6种方式的相关文章

JS继承的几种方式

JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一. 既然要实现继承,那么我们先定义一个父类: // 定义一个动物类 function Animal (name) { // 属性 this.name = name || 'Animal'; // 实例方法 this.sleep = function(){ alert(this.name + '正在睡觉!'); } } // 原型方法 Animal.prototype.eat = function(food) { alert(this.na

理解js继承的6种方式

想要继承,就必须要提供个父类(继承谁,提供继承的属性) 一.原型链继承 重点:让新实例的原型等于父类的实例. 特点:1.实例可继承的属性有:实例的构造函数的属性,父类构造函数属性,父类原型的属性.(新实例不会继承父类实例的属性!) 缺点:1.新实例无法向父类构造函数传参. 2.继承单一. 3.所有新实例都会共享父类实例的属性.(原型上的属性是共享的,一个实例修改了原型属性,另一个实例的原型属性也会被修改!) 二.借用构造函数继承 重点:用.call()和.apply()将父类构造函数引入子类函数

js继承有5种实现方式

js继承有5种实现方式:1.继承第一种方式:对象冒充  function Parent(username){    this.username = username;    this.hello = function(){      alert(this.username);    }  }  function Child(username,password){    //通过以下3行实现将Parent的属性和方法追加到Child中,从而实现继承    //第一步:this.method是作为一

js如何实现继承(js实现继承的五种方式)

js继承有5种实现方式: 1.继承第一种方式:对象冒充 function Parent(username){ this.username = username; this.hello = function(){ alert(this.username); } } function Child(username,password){ //通过以下3行实现将Parent的属性和方法追加到Child中,从而实现继承 //第一步:this.method是作为一个临时的属性,并且指向Parent所指向的对

js 实现继承的几种方式

//js中实现继承的几种方式 //实现继承首先要有一个父类,先创造一个动物的父类 function Animal(name){ this.name = name; this.shoot = function(){ console.log("yelp"); } } //动物的原型 Animal.prototype.eat = function(food){ console.log(name+"吃"+food); } //1.实例继承 var dog = new Ani

javascript继承的两种方式

javascript继承的两种方式 1,原型链 1 <script type="text/javascript"> 2 function A() 3 { 4 this.name='a'; 5 } 6 function B() 7 { 8 9 } 10 11 12 B.prototype=new A(); 13 var obj=new B(); 14 15 alert(obj.name); 16 </script> 2,对象冒充 1 <script type

js创建对象的四种方式以及消耗时间比较

// Property-less object console.time('zoop1'); var zoop = (function (numObjects) { var pooz = Object.create(null); for(var i = 0; i< numObjects; i++) { pooz[i] = Object.create(null); } return pooz; })(1000000); console.timeEnd('zoop1'); // Using Obje

javascript中实现继承的几种方式

javascript中实现继承的几种方式 1.借用构造函数实现继承 function Parent1(){ this.name = "parent1" } function Child1(){ Parent1.call(this); this.type = "child1"; } 缺点:Child1无法继承Parent1的原型对象,并没有真正的实现继承(部分继承) 2.借用原型链实现继承 function Parent2(){ this.name = "p

面向对象的三大特征中的 “继承” 和继承的几种方式

学习继承之前,要先了解什么是面向对象:(把相同的代码提取(抽象)出来归为一类,把公共的方法挂在 这个类的原型上 的一种编程思想(开发模式)) >>原型和原型链,在,面向对象,的那个随笔分类里有细说.<< 面向对象的三大特征:抽象.封装.继承.(多态) 抽象:提取类似的部分. 封装:归类的过程. 继承:子类拥有父类的属性或者方法,自己也有自己的一套属性和方法. /******************************** 下面开始这篇随笔的主题:继承 和 继承的几种方式****