JS高级---借用构造函数

借用构造函数

为了数据共享, 改变原型指向, 做到了继承---通过改变原型指向实现的继承

缺陷: 因为改变原型指向的同时实现继承, 直接初始化了属性,继承过来的属性的值都是一样的了, 所以,这就是问题

只能重新调用对象的属性进行重新赋值

解决方案:

继承的时候, 不用改变原型的指向, 直接调用父级的构造函数的方式来为属性赋值就可以了------

借用构造函数: 把要继承的父级的构造函数拿过来, 使用一下就可以了

缺陷:

借用构造函数:构造函数名字.call(当前对象,属性,属性,属性....);

解决了属性继承,并且值不重复的问题

缺陷: 父级类别中的方法不能继承

    function Person(name, age, sex, weight) {
      this.name = name;
      this.age = age;
      this.sex = sex;
      this.weight = weight;
    }
    Person.prototype.sayHi = function () {
      console.log("您好");
    };
    function Student(name, age, sex, weight, score) {
      //借用构造函数
      Person.call(this, name, age, sex, weight);
      this.score = score;
    }
    var stu1 = new Student("小明", 10, "男", "10kg", "100");
    console.log(stu1.name, stu1.age, stu1.sex, stu1.weight, stu1.score);

    var stu2 = new Student("小红", 20, "女", "20kg", "120");
    console.log(stu2.name, stu2.age, stu2.sex, stu2.weight, stu2.score);

    var stu3 = new Student("小丽", 30, "妖", "30kg", "130");
    console.log(stu3.name, stu3.age, stu3.sex, stu3.weight, stu3.score);

原文地址:https://www.cnblogs.com/jane-panyiyun/p/12155664.html

时间: 2024-10-17 11:59:21

JS高级---借用构造函数的相关文章

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

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

js继承之二(组合模式=借用构造函数+原型链方式)

借用构造函数模式:不能继承原型上的属性,可以避免引用类型修改问题 原型链:能够继承原型上的属性,会发生引用类型修改 so:敲黑板! function CarModel(c){ this.color=c||"白色"; this.arr=[1,2,3]; this.getColor=function(){ console.log('我的颜色是'+this.color); } } CarModel.prototype.test="lla"; function Car(br

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

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

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

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

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

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

JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承

说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象JS基础讲解,工厂模式.构造函数模式.原型模式.混合模式.动态原型模式>,接下来讲一般通过那些方法完成JavaScript的继承. 原型链 JavaScript中实现继承最简单的方式就是使用原型链,将子类型的原型指向父类型的实例即可,即“子类型.prototype = new 父类型();”,实现方法如下

关于js中原生构造函数的继承

前言 最近参加了蚂蚁金服的面试,一个关于js继承的问题答的不是特别好.在如今快节奏的工作当中,很多基础的东西会渐渐被丢掉.就如继承这个话题,写React的同学应该都是class xxx extends React.Component,然而这可以理解为es5的一个语法糖,所以问题又回到了js如何实现继承.面试结束后,赶紧翻了翻积满灰尘的js高级程序设计,重新学习了一遍面向对象这一章,有一个创建对象的模式吸引到了我. 寄生构造函数模式 在oo中我们是通过类去创建自定义类型的对象,然而js中没有类的概

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

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

JS高级程序设置笔记(二)

5.4 RegExp类型 用这个类来表示正则表达式. var expression = /pattern/flags; pattern部分是任何简单的或者复杂的正则:每一个正则都有一个或者多个标志. 正则表达式匹配模式下支持下列3个标示 1:g 全局模式 2:i 不区分大小写 3:m 表示多行 5.4.1RegExp实例属性: 1:global:布尔值,表示是否设置了g标志. 2:ignoreCase:布尔值:表示是否设置了i标志 3:lastIndex:整数,表示开始搜索下一个匹配的字符位置,