JavaScript继承-借用构造函数继承

借用构造函数继承是在子类型构造函数的内部调用超类型狗在函数,通过使用apply()和call()方法

    function girlFriend(){
        this.girls = [‘chen‘,‘wang‘,‘zhu‘];
    }
    function Person(){
        girlFriend.call(this,20);
    }
    var wang = new Person();
    var zhu = new Person();
    wang.girls.push(‘zhang‘);
    console.log(wang.girls);    //(4) ["chen", "wang", "zhu", "zhang"]
    console.log(zhu.girls);        //(3) ["chen", "wang", "zhu"]

通过以上代码,我们可以发现,在原型链继承中出现的问题不再出现了,这个超类不会被子类所创建的实例共享了。

借用构造函数继承的优势是可以在子类型构造函数中向超类型构造函数传递参数,例如以下代码:

    function SuperType(name){
        this.name = name;
    }
    function SubType(){
        SuperType.call(this,"nick");
        this.age = 20;
    }
    var instance = new SubType();
    console.log(instance.name);        //nick
    console.log(instance.age);        //20

原文地址:https://www.cnblogs.com/gehaoyu/p/11804384.html

时间: 2024-10-08 18:46:00

JavaScript继承-借用构造函数继承的相关文章

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

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

javascript继承,原型继承,借用构造函数继承,混合继承

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getS

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

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

js继承之借用构造函数继承

一.原型链的缺点 1.1 单纯的原型链继承最大的一个缺点,在于对原型中引用类型值的误修改. 先看一个例子: //父类:人 function Person () { this.head = '脑袋瓜子'; } //子类:学生,继承了"人"这个类 function Student(studentID) { this.studentID = studentID; } Student.prototype = new Person(); var stu1 = new Student(1001);

JS 面向对象之继承 -- 借用构造函数

转自 http://www.cnblogs.com/yangjinjin/archive/2013/02/01/2889519.html 上次讲到的原型链中,原型链存在一个问题就是不能向超类型的构造函数传递参数.那么这次就是要实现如何向超类型构造函数传递参数. 这种方法我们称之为借用构造函数(constructor stealing) 这里的实现方法是使用js的原生方法apply()或all().那么先温习下apply()和all()函数的知识. call方法: 语法:call([thisObj

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

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

JavaScript里面向对象的继承:构造函数&quot;继承&quot;的五种方法

//现在有一个"动物"对象的构造函数. function Animal(){ this.species = "动物"; } //还有一个"猫"对象的构造函数. function Cat(name,color){ this.name = name; this.color = color; } 怎样才能使"猫"继承"动物"呢? 一. 构造函数绑定 第一种方法也是最简单的方法,使用call或apply方法,将父对

Javascript中用来实现继承的几种方式

一.原型链继承 原理:修改子类型的原型,使其指向父类型的实例: 缺点: 1,不能以字面量方式在子类型的原型上添加新方法:这回重新改写子类型的原型: 2  创建子类型的实例时无法向父类型的构造函数传参. 3,不同子类型的实例对父类型中引用类型的属性进行操作时,会产生篡改 产生这种问题的原因是:父类型实例的color属性被子类型的原型继承:成为了子类型的原型属性:而引用类型值的原型属性会被所用实例共享. 二.借用构造函数继承 借用构造函数继承,可以解决原型中包含引用类型值所带来的问题: 原理:在子类

282 继承模式:原型链继承 : 得到方法,借用构造函数 : 得到属性,组合,new一个对象背后做了些什么

1.原型链继承 : 得到方法 function Parent(){} Parent.prototype.test = function(){}; function Child(){} Child.prototype = new Parent(); // 子类型的原型指向父类型实例 Child.prototype.constructor = Child var child = new Child(); //有test() <!DOCTYPE html> <html lang="e