构造函数继承--call,apply

构造函数继承的原理 : 通过改变this指向来实现继承(在子类中使用call或apply的方式调用父类  让父类中的this指向子类new出来的对象)

  语法格式:

    function  子类函数名(参数1,参数2){

      父类函数名.call(this,参数1,参数2);     //注: 实例继承

    }

    function  子类函数名(参数1,参数2){

      父类函数名.apply(this,arguments或者[参数1,参数2,参数3,......]);     //注: 实例继承

    }

call和apply的特点:

  两个都只能继承实例不能继承原型,第一个参数的this都一样,指的是当前对象. call的第二个参数开始是参数列表,apply的第二个参数是数组或者arguments

  可以执行函数,可以带入参数,可以改变调用函数中this的指向,不能用于创建函数

call方法的练习:

    function fn3(num){
        this.a = num;     //obj1.a = 10
        fn4(this);      //调用fn4将obj1对象传递到fn4
    }
    function fn4(obj){
        obj.b = 10;        //为obj1添加新的属性b和c
        obj.c = 20;
    }
    var obj1 = {};  //定义一个对象,此时该对象没有任何属性
    fn3.call(obj1,10);  //调用fn3函数,让该函数中的this指向obj1,并传递参数10
    console.log(obj1);  //{a:10,b:10,c:20}

apply方法练习:

    function Father(tel,name,age){
        this.money = 99999999;
        this.name = name;
        this.age = age;
        this.tel = tel;
        this.dance = function(){
            console.log("会跳舞");
        }
    }

    function Son(tel,name,age){
        //在子类中使用call、或apply或bind调用父类的构造函数 并将父类中的this指向子类对象
        //Father.call(this,tel,name,age);
        //Father.apply(this,[tel,name,age]);
        Father.apply(this,arguments);    //在使用arguments的时候传递参数的顺序,和接收参数的顺序必须保持一致
    }
    var son = new Son("132xx","xm",13);
    var son1 = new Son("133xx","xh",18);
    console.log( son,son1 );
              

原文地址:https://www.cnblogs.com/self-hard/p/10364433.html

时间: 2024-08-30 08:17:40

构造函数继承--call,apply的相关文章

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);

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

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

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

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

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

Javascript继承2:创建即继承----构造函数继承

//声明父类 function SuperClass(id){ //值类型公有属性 this.id = id; //引用类型公有属性 this.books = ['Html','Css']; } //父类声明原型方法 SuperClass.prototype.showBooks = function(){ console.log(this.books) } //声明子类 function ChildClass(id){ //继承父类 SuperClass.call(this,id) } var

39.C#--面对对象构造函数及构造函数继承使用

//一.新建Person类namespace _39.面对对象构造函数及构造函数继承使用{public class Person{//字段.属性.方法.构造函数//字段:存储数据//属性:保护字段,对字段的取值和设值进行限定//方法:描述对象的行为//构造函数:初始化对象(给对象的每个属性依次的赋值)//类中的成员,如果不加访问修饰符,默认都是privateprivate string _name; //字段public string Name //属性{get { return _name;

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

在ES6之前并没有提供extends继承,我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承. 核心原理:通过call()把父类型的this指向子类型的this,这样就可以实现子类型继承父类型的属性. // 借用父构造函数继承属性 function Father(name, age) { // this指向父构造函数对象的实例 this.name = name this.age = age } function Son(name, age) { // this指向子构造函数对象的实例 F

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

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