js中的call()和apply()

 

obj.call(thisObj,arg1, arg2, ...);

obj.apply(thisObj,[arg1, arg2, ...]);

call 和 apply的工作方式基本相同,唯一的不同之处在于参数的传递形式。都是改变this指向。借用别人的方法来实现自己的需要的功能

function test(name,age){
    this.name = name;
    this.age = age
}
//其实test() 执行等于  test.call(); 
var obj = {};
//现在想要借助test函数给obj添加一个name和age
test.call(obj,'a',20);//第一个参数是this的指向,后面的参数是函数需要的形参
/*
    当调用call时,test函数里面会把this的指向换成obj,就是这样
    function test(name,age){
        //var this = obj;
        
        this.name = name;//等于obj.name = name
        this.age = age;//等于obj.age = age
    }
    所以当函数执行完后,obj就不在是空值了
    此时obj={
        name:"a",    
        age:20
    }
    这就是借用别人的方法来实现自己需要的功能
    
*/

现在有两个函数,第二个函数的功能包含了第一个函数的功能

function people(name,age){
    this.name = name;
    this.age = (function(){
        age++;
        return age;
    }());
    console.log('name:'+this.name);
}
function students(name,age,height,tel){
    this.name = name;
    this.age = age;
    this.height= height;
    this.tel= tel
}
//那么现在students方法完全可以实现people方法的功能,students可以这么写
function students(name,age,height,tel){
    people.call(this,name,age);
    this.height= height;
    this.tel= tel;
    console.log("age:"+this.age)
}
students('a',20,180,1231313123);//会打印出name:a  age:21

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值