美文网首页
js apply和call

js apply和call

作者: AngleYan | 来源:发表于2017-11-10 18:01 被阅读0次

    apply和call

    1. 每个函数都有两个非继承而来的方法;call和apply
    2. 相同点:设置函数体内this的指向,以扩展赖以运行的作用域
     一般来说,this总是指向调用某个方法的对象,它俩都是改变this的指向。
    

    apply的实例

    apply的用法

    apply方法:
    语法:apply([thisObj[,argArray]])
    定义:应用某一对象的一个方法,用另一个对象替换当前对象。
    说明:
    如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
    如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

    var obj = {
            "a":1,
            "b":2,
            show:function () {
                console.log(this.a)
            }
        }
        var obj2 = {
            "a":3
        }
        obj.show.apply(obj2);//其实相当于obj2,继承了obj里面的show方法,所以show里面的this指向了obj2
        obj.show.apply('');//由于‘’字符串调用obj的show方法,show里面的this指向了‘’字符串
        obj.show.apply(window);//this指向了window
        obj.show.apply(document);//window
        obj.show.apply();//默认是指向全局的window
        obj.show.apply(undefined);//指向全局的window
    

    call方法

    call方法:
    语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
    定义:调用一个对象的一个方法,以另一个对象替换当前对象。
    说明:
    call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
    如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

    function Animate() {
            this.name = 'abc';
            this.type =1;
            this.getName = function () {
                console.log(this.name)
                return this.name;
            }
            this.setName = function (name) {
                this.name = name;
            }
        }
    
        function Dog() {
            this.name = 'dog';
            Animate.call(this);//dog是动物的子类;call和apply有继承的特性,改变当前对象的指向
    //重写父类的方法
            this.getName = function () {
                console.log('&&&&&&')
                console.log(this.name)
                return this.name;
            }
            this.setName = function (name) {
                this.name = name;
            }
    
    
        }
    
    
        var dog = new  Dog();
        dog.setName('dog1');
        dog.getName();
    

    自我基础的理解,有错误欢迎指正

    相关文章

      网友评论

          本文标题:js apply和call

          本文链接:https://www.haomeiwen.com/subject/dzximxtx.html