js 中call,apply,bind的使用

三者在js中修改作用域很重要

普通使用方法:

var xw = {
  name : "小王",
  gender : "男",
  age : 24,
  say : function() {
             consol.log(this.name + " , " + this.gender + " ,今年" + this.age);                                
        }
}
var xh = {
        name : "小红",
        gender : "女",
        age : 18
}
xw.say();

第一次执行毋庸置疑结果: 小王 , 男 ,今年24
第二次执行 xw.say.call(xh)小红,女,18岁
第三次 xw.say.apply(xh) : 小红,女,18岁
第四次:xw.say.bind(xh)() : 小红,女,18岁

总结:callapply 作用一样都是作用于函数身上但是bind** 返回的还是函数,需要单独调用

再修改,查看传递参数区别:

var xw = {
 name : "小王",
   gender : "男",
   age : 24,
   say : function(school,grade) {
           alert(this.name + " , " + this.gender + " ,今年" + this.age + " ,在" + school + "上" + grade);                                
   }
}
var xh = {
   name : "小红",
   gender : "女",
   age : 18
}

第一次调用:xw.say.call(xh,'北京二小',‘一年级’) 执行结果是:小红 北京二小 今年 18岁
第一次调用:xw.say.apply(xh,['北京二小',‘一年级’]) 执行结果是:小红 北京二小 今年 18岁
第三次调用:xw.say.bind(xh)('通渭三中','高三年级') 执行结果是: 小红 通渭三中 高中二年级 18岁

总结: call, applybind 三者 调用参数凡是不一样

2018 年九月 百度商业部 一道作用域的面试题:

 var name = 'anikin'
 var obj = {
      name:'jack',
      show: function(){
          console.log(this.name)
      },
      all:{
          name:'rose',
          showname: function(){
               console.log(this.name)
          }
      }
  }

1var a = obj.all.showname
   a()  // anikin
2: obj.show()  // jack
3: obj.all.showname.call(obj)  // jack
4: obj.call.showname.call()    // anikin   

难度不大。主要是考察基本作用域的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值