利用构造函数继承父类型属性

在ES6之前并没有提供extends继承,我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承。

核心原理:通过call()把父类型的this指向子类型的this,这样就可以实现子类型继承父类型的属性。

// 借用父构造函数继承属性

function Father(name, age) {

// this指向父构造函数对象的实例

this.name = name

this.age = age

}

function Son(name, age) {

// this指向子构造函数对象的实例

Father.call(this, name, age)

}

var son = new Son(‘张三‘, 18)

console.log(son) // Son {name: "张三", age: 18}

我们通过Father.call(this, name, age)传入Son中的this使Father的this指向改变成son。这样就不需要再在Son中写父类已经拥有的属性了。

而且如果子类还需要有自定义的属性,可以单独定义

function Son(name, age, score) {

// this指向子构造函数对象的实例

Father.call(this, name, age)

this.score = score

}

var son = new Son(‘张三‘, 18, 100)

console.log(son) // Son {name: "张三", age: 18, score: 100}

当需要继承父类的方法时:

Father.prototype.money = function() {

console.log(‘我要赚钱‘)

}

Son.prototype.exam = function() {

console.log(‘我要考试‘)

}

Son.prototype = new Father()

Son.prototype.constructor = Son

一定要记得改回construcotr指向!!!

原文地址:https://www.cnblogs.com/perse/p/12040426.html

时间: 2024-10-10 07:56:33

利用构造函数继承父类型属性的相关文章

236 子构造函数继承父构造函数中的属性

先定义一个父构造函数 再定义一个子构造函数 子构造函数继承父构造函数的属性(使用call方法) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <

call继承父级属性,prototype继承父级方法

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Document</title> </head> <body> </body> <script type="text/javascript" > // 通过call继承父级属性 func

js组合继承(原型继承+借用构造函数继承)

组合继承就是将原型链和构造函数结合起来发挥二者优势的一种模式.继承:是类型与类型之间的继承继承目的:把子类型相同成员提取到父类型,实现代码重用 大体思路是:使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承,很好地解决了原型链继承的缺点,是较为常用的一种继承方式.//一:借用构造函数(借用父类型extend) 缺点:无法继承父类型的方法//父类型 function Person(name,age,sex){ this.anme=name;this.age=age;th

Effective JavaScript Item 39 绝不要重用父类型中的属性名

本系列作为Effective JavaScript的读书笔记. 如果需要向Item 38中的Actor对象添加一个ID信息: function Actor(scene, x, y) { this.scene = scene; this.x = x; this.y = y; this.id = ++Actor.nextID; scene.register(this); } Actor.nextID = 0; 同时,也需要向Actor的子类型Alien中添加ID信息: function Alien(

利用css如何让嵌套的div层不继承父div层的透明度?

http://zhidao.baidu.com/link?url=cvQhh0Q7_ah0qg9tc-2zP0cjB_PoIiIq6t6RFpp4aZPPNoVJUqyy7TT41TU5pWzRtRYIMNCkdMkAV36oR-RraFyyghs__ULNjlNiOGgkYOC 利用css如何让嵌套的div层不继承父div层的透明度? http://blog.csdn.net/foart/article/details/39177653 DIV浮在上层并让DIV背景半透明代码 http://x

解决Table不继承父节点的属性的方法

解决Table不继承父节点的属性的方法 发现table不继承父节点的属性. 解决方法:给html文件加上<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" > 就能继承了. 原文地址:https://www.cnblogs.com/bjguanmu/p/10120669.html

在linux 系统中利用 facl 实现目录下创建文件继承父目录的权限的所属组

在linux 系统中,可以通过setfacl 来实现目录下创建文件或子目录,并继承父目录的权限. 下面以 root 用普通用户 user1 .在目录/mnt下 [[email protected] mnt]# setfacl -m u:user1:rwx share        //为目录添加ower = user1 ,并赋予rwx 的权根. [[email protected] mnt]# setfacl -d -m  u:user1:rwx share    //为目录添加默认的acl权限

JS继承之借用构造函数继承和组合继承

根据少一点套路,多一点真诚这个原则,继续学习. 借用构造函数继承 在解决原型中包含引用类型值所带来问题的过程中,开发人员开始使用一种叫做借用构造函数(constructor stealing)的技术(有时候也叫做伪造对象或经典继承).这种技术的基本思想相当简单,即在子类型构造函数的内部调用超类型构造函数. 基本模式 function SuperType(){ this.colors = ["red", "blue", "green"]; } fu

javascript 封装 构造函数继承 非构造函数继承

1 封装 把"属性"(property)和"方法"(method),封装成一个对象,甚至要从原型对象生成一个实例对象 1.1 简单封装:var cat1 = {}; // 创建一个空对象 cat1.name = "大毛"; // 按照原型对象的属性赋值 cat1.color = "黄色"; 1.2 构造函数Prototype模式 Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象.这个对象的