• 【JavaScript】js中的call方法


    moziila官方文档链接https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/call
    fun.call(thisArg[, arg1[, arg2[, ...]]])
    1.其中fun表示原始的方法对象;
    2.参数:
      thisArg表示最终使用的对象;
      arg1和arg2为该方法的参数。
    简单的说,就是使用:原始方法对象.call(最终的对象,方法参数列表),这样就使得原始方法中的用到的this对象变成了最终的对象,而不是原始方法所对应的对象。
    //如下实例:
    function B(){
        this.name = 'kitty';
        this.age = 24;
        this.say = function(){
            console.debug(this.name)
        };
    }
    
    function C(){
        this.name = 'tab';
    }
    var c = new C();
    console.debug(b.say.call(c));//就是将b对象中的say方法的调用者对象this替换为c对象,那么此时say方法中的this对象就是c对象了。
    ---------------------------------------
    上面代码的console打印结果:

    ---------------------------------------

    3.【注】:使用call方法可以实现继承:
       可以让call()中的对象调用当前对象所拥有的function。你可以使用call()来实现继承:写一个方法,然后让另外一个新的对象来继承它(而不是在新对象中再写一次这个方法)。
    function Old(age){
        this.age = age;
        this.type = age>18?'adult':'children';
    };
    
    function Sub(){
        this.name = 'son';
        this.subM = function(age){
            Old.call(this,age);
        }
    }
    var s  = new Sub();
    console.debug('未调用父类构造方法前的type属性是:'+s.type)
    console.debug('未调用父类构造方法前的子类对象是:')
    console.debug(s)
    console.debug('------------------------------------------------');
    s.subM(111)
    console.debug('已调用父类构造方法前的type属性是:'+s.type)
    console.debug('已调用父类构造方法后的子类对象是:')
    console.debug(s)
    
    //通过在子类的构造函数中调用父类的构造函数,实现了将原先定义在父类构造函数中的属相创建及赋值操作在此时由于使用了call方法将this指向了子类对象,因此此时该父类构造方法将属性添到了子类对象上。

    --------------------------------------------------------------

    上面代码的console打印结果:

    --------------------------------------------------------------

     
     
  • 相关阅读:
    day 26 python2和python3的区别 模块logging 的高级版,collections 模块,random模块
    常用模块:time,os,sys,rondom
    模块 hashlib(算法) configparser(配置) logging(日志)
    序列化,json pickle,shelve
    面向对象的封装,多态,单例模式
    属性,类方法,静态方法,反射
    面向对象的接口类 以及鸭子类型
    面向对象的继承
    面向对象的介绍
    reset internet explorer settings with registry
  • 原文地址:https://www.cnblogs.com/tabchanj/p/5919250.html
Copyright © 2020-2023  润新知