• call和apply用法


    call和apply作用就是改变this的指向,可以让一个对象调用其他对象的方法

    先看一个例子:

    function fun(){
    
    }
    fun.prototype={
    	name:"Mark",
    	say:function(){
    		alert("Name is "+this.name)
    	}
    }
    var fun1 = new fun();
    obj = {
    	name:"Roy"
    }
    fun1.say(); //Name is Mark
    fun1.say.call(obj); //Name is Roy
    

    这样,obj就具有了fun的say()方法了,这是this.name指的就是"Roy"。

    下面看下带参数的call和apply的用法,call和apply的区别就在于第二个参数传递的不一样,call是传递任何类型的,而apply是要数组类型的。

    function add(a,b){
    	alert(a+b);
    }
    function test(){
    	alert("test")
    }
    add.call(test,1,2)
    add.apply(test,[1,2])
    

    这个例子中两次都弹出3。

    通过call和apply,本来执行test函数是要弹出“test”的,但是通过call/apply就可以让test具有add的方法,也就是执行test时候实际执行的是a+b。

    call和apply区别就在于第二个参数的传递,call要分别传递参数,而apply是要传递一个数组。

    再来一个例子实现call和apply对函数的继承

    function sum(a,b,c,d){
    	alert(a+b+c+d);
    }
    
    function sumInh(a,b,c,d){
    	sum.call(this,a,b,c,d);
    	sum.apply(this,arguments);
    	sum.apply(this,[a,b,c,d])
    }
    sumInh(1,2,3,4);
    

    这三种方法实现继承的效果是一样的,都是让sumInh拥有sum的方法。

    这样继承就直接执行了函数,再来一个例子说明它们在构造函数中的作用。

    function sum(){
    	this.add = function(a,b){
    		alert(a+b)
    	}
    }
    function sub(){
    	this.sub = function(a,b){
    		alert(a-b)
    	}
    }
    function sumInh(){
    	sum.call(this);
    	sub.call(this);
    }
    var newSunInh = new sumInh();
    newSunInh.add(1,2); //3
    newSunInh.sub(1,2); //-1
    

    这里sumInh继承了sum和sub两个函数的方法,所以可以当做sumInh函数的方法进行调用。

  • 相关阅读:
    重学微积分
    重学微积分
    重学微积分
    python打包成exe过程中遇到的问题
    日常笔记-VS
    Python项目案例开发从入门到实战-1.5Python文件的使用
    Python项目案例开发从入门到实战-1.4Python图形界面设计
    Python项目案例开发从入门到实战-1.3 Python面向对象设计
    Python项目案例开发从入门到实战-1.2 Python语法基础
    剑指offer题目汇总
  • 原文地址:https://www.cnblogs.com/smartyu/p/5195360.html
Copyright © 2020-2023  润新知