js中bind、apply、call简单使用

近来发现js基础不是很好,其实菜的要命(·… 。…·),先来回顾下js的bind、apply和call吧。

bind()方法会创建一个新函数,当这个新函数被调用时,他的this值是传递给bind的第一个参数;

新函数的参数是bind()的其他参数和其原本的参数当绑定的;

函数被调用时,thisArg 作为原函数运行时的this指向;

但是使用new操作符调用函数时该参数无效

 function fn(a, b, c, d, e) {
        console.log(a, b, c, d, e)
        return this.s + a + b + c
    }

    var _fn = fn.bind({
        s: 0
    }, 10, 11, 12); //{s:0}为函数_fn运行时的this指向 ;10 11 12作为函数的第一第二第三个参数
    var ans = _fn(30, 1, 2, 3); //30 作为第四个参数,以此类推  多余的参数无效
    console.log(ans, "===51===")

来一个简单栗子:每隔一秒在控制台打印 1-5

方法一:

   for (var i = 1; i <= 5; i++) {
         //立即调用
         ! function(a) {
             setTimeout(function() {
                 console.log(a);
             }, i * 1000);
         }(i);
    }

方法二:

使用let


    for (let i = 1; i <= 5; i++) {
        // let方式
        setTimeout(function() {
            console.log(i);
        }, i * 1000);
    }

方法三:

使用bind方法


    for (var i = 1; i <= 5; i++) {
        setTimeout(console.log.bind(console, i), i * 1000)
    }

apply和call调用模式:即ObjA.apply(ObjB,args[])或者ObjA.call(ObjB,arg1,arg2...)。

函数调用时,除了接收形式参数外,还会接收this和arguments。其中this为函数对象上下文,arguments为实际参数。

apply和call实现同样的功能,即切换函数对象的上下文(this指向的引用),区别在于形式参数不一样。apply为arguments或者数组,

call为以逗号隔开多个单独形式参数。

    fun.apply(thisArg,[1,2,3,4])

    fun.call(this.arg,1,2,3,4)

来一个简单栗子:通过apply和call实现扩展和继承

   function Animal(name, age) {
        this.name = name;
        this.age = age;
        this.showName = function() {
            alert(this.name + this.age)
        }
    }

    function Cat(name) {
        Animal.call(this, name)
    }

    function Dog(name, age, sex) {
        Animal.apply(this, [name, age, sex])
    }

    var cat = new Cat('这是一个小黑猫') //
    cat.showName()

    var dog = new Dog('这是一只小狗子', 23, 'nv')
    dog.showName()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

随风小薇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值