JS高级(四)

call与apply()方法

call与apply都可以改变this指向

两者的传参方法不一样

  • apply()方法 接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
  • call()方法 第一个参数和apply()方法的一样,但是传递给函数的参数必须列举出来。

f1.call(null, 10, 30);

f1.apply(null, [100, 200]); //如果为null或者不传 则默认为window

f1.call(obj, 10, 20);

f1.apply(obj, [100, 200]);// 此时,f1函数的指向变成了obj的

也可以用来改变方法this中的指向

per.eat.call(stu); //现在per里面的eat方法中的this就是stu

bind()方法

bind():只是绑定的时候改变this,不是在调用的时候改变this

bind是长期将this绑定,call与apply方法都是临时绑定

可以在复制的时候传参,也可以在啊复制之后调用的时候传参

总结

总结
① 传递的参数不多的时候,使用fn.call(需要指向的对象, 参数1, 参数2, ..., 参数n)
② 传递的参数较多的时候,使用fn.apply(需要指向的对象, [参数1, 参数2, ..., 参数n])
③ 只想将函数长期的绑定给某一个对象使用,使用fn.bind(需要指向的对象, 参数1, 参数2, ..., 参数n)

函数中的几个主要成员

function f1(x, y) {
    console.log(f1.arguments.length);// 实参的个数
    console.log(f1.length);// 形参的个数
    console.log(f1.name);// 函数名
    console.log(f1.caller);// f1的调用者是f2
}
f1.name = "fff";// 不能修改
f1(10, 20, 30, 40);
function f2() {
    f1(1, 2);
}
f2();
console.dir(f1);

函数可以作为另一个函数的变量来进行传参

既可以传匿名函数也可以传命名函数,在使用函数变量时应该用函数的方法来使用

函数也可以作为返回值来使用

        // 数组排序 A < Z < a < z
        var arr = ["A", "a", "b", "z", "Z", "C"];
        arr.sort(function(a, b) {
            // var a = a.toLowerCase();
            // var b = b.toLowerCase();
            if(a > b) {
                return 1;
            }else if(a == b) {
                return 0;
            }else {
                return -1;
            }
        })
        console.log(arr);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WA终结者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值