JavaScript 继承(三)call apply bind 简介

17 篇文章 0 订阅

不好意思因为懒,,我懒得弄图,,就是代码+注释

function fun(){
    this.x = 2;
    
    this.show = function(){
        console.log(this.x);
    }
    
    this.show2 = function(val,val2){
        console.log(val+val2+this.x);
    }
}

var num = {
    x:1
}

var x = 10;

var obj = new fun();
obj.show();//2
//不解释

obj.show.call(num);//1
//call 调用obj.show 并且改变其this 指向num 所以 console.log(this.x); this.x 是 num.x也就是1
obj.show.call();
obj.show.call(null);
obj.show.call(undefined);
//上面三个都是 10 不传或者传入 null 或者 undefined 都会指向window

obj.show2(1,2);//1+2+2 = 5

obj.show2.call(obj,3,2);//3+2+2 = 7
//call还可以传入参数
obj.show2.call(num,0,0);//0+0+1 = 1

obj.show2.apply(num,[0,0]);//apply 和call 的区别在于 传参方式不同
//还有一个bind 也能有类似效果
obj.show2.bind(num,1,2)();//1+2+1 = 4
//也是修改了show的this指向但是区别在于bind是创建了一个函数称为绑定函数
//调用该函数时会以创建它时传入 bind()方法的第一个参数作为 this,
//传入 bind方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序
//作为原函数的参数来调用原函数。
//也可以写成
var f = obj.show2.bind(num,1,2);//bind 创建了一个绑定函数
f();//调用绑定函数 执行原函数




//apply 数组传参可以解决变长参数的问题如下

function log(){
    console.log.apply(console, arguments);
}

log(1,2,3);









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值