zoukankan      html  css  js  c++  java
  • 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函数的方法进行调用。

  • 相关阅读:
    Codeforces 1316B String Modification
    Codeforces 1305C Kuroni and Impossible Calculation
    Codeforces 1305B Kuroni and Simple Strings
    Codeforces 1321D Navigation System
    Codeforces 1321C Remove Adjacent
    Codeforces 1321B Journey Planning
    Operating systems Chapter 6
    Operating systems Chapter 5
    Abandoned country HDU
    Computer HDU
  • 原文地址:https://www.cnblogs.com/smartyu/p/5195360.html
Copyright © 2011-2022 走看看