js中的call()方法和apply()方法用法总结

每个函数都包含两个非继承而来的方法:call()方法和apply()方法。

在JavaScript中,call/apply的作用是:

1.相同点:都是改变this指向

2.区别:后面传的参数形式不同。

call()方法使用示例:

function Person(name,age){


    	//this == obj
    
    	this.name = name;
    	this.age = age;
    }
    var person = new Person('deng',100);

    var obj = {

    }
    Person.call(obj,'cheng',300);
    //后面传的是实参

call的作用是:改变Person()中的this指向,使 this = obj ,this.name = name–>obj.name
this.age = age–>obj.age
再传回空对象obj里面。

var obj = {
           obj.name = name;
           obj.age = age;
    }

就像相当于现在有一个功能十公俱全的车间Person,然后现在创建一个空的车间obj,然后obj要复制Person里面的功能,这样我们就可以用到call来改变Person()里面的this指向,来进行复制功能或者方法,达到自己的所用。
给personcall里面传入一个obj的一个空对象,obj会取代this,然后它后面的参数会取代this的属性name和age,利用别人的方法实现自己的功能,借助别人的函数,借助perosn的构造函数来构造自己的功能。

举个例子;

function Person(name,age,sex){
    	this.name = name;
    	this.age = age;
    	this.sex = sex;
    }
    function Student(name,age,sex,tel,grade){
    	this.name = name;
    	this.age = age;
    	this.sex = sex;
    	this.tel = tel;
    	this.grade = grade;
    }
    var student = new Student('sunny',123,'male',139,2017);

创建两个构造函数,Person()和Student()
可以看到这两个函数有三个属性示一模一样的,我们就可有用call来实现功能的复制。

 function Person(name,gae,sex){
    	this.name = name;
    	this.age = age;
    	this.sex = sex;
    }
    function Student(name,age,sex,tel,grade){
    	// var this = {name:"",age :"", sex:""}
    	Person.call(this,name,age,sex);
    	this.tel = tel;
    	this.grade = grade;
    }
    var student = new Student('sunny',123,'male',139,2017);




 // Person.call(this,name,age,sex)-->this.name = name;
        	                          this.age = age;
                                     this.sex = sex;

为何Person.call(this,name,age,sex)就等同于这三个属性
因为在创建new的时候,构造函数内部就存在了一个隐式的this–>var this = {};
然后 Student里面的this会改变Person内部this的指向,使它指向自己的this,从而实现复制。

apply的功能和call的功能是一模一样的,只不过apply里面必须是传一个数组
call:需要把实参按照形参的个数传进去
apply:需要传一个arguments

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值