Hi FE !
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
  • Q007-call和apply及bind区别

Q007-call和apply及bind区别

var name = '王',age= 17;
var obj1 = {
  name:'校长',
  objAge:this.age,
  myFun:function(fm,t) {
    console.log(this.name+ "年龄"+ this.age, "来自" + fm + "去往" + t)
  }
}
var db ={
  name:'德玛',
  age:99
}
obj1.myFun.call(db,'成都','上海');     // 德玛 年龄 99  来自 成都去往上海
obj1.myFun.apply(db,['成都','上海']);      // 德玛 年龄 99  来自 成都去往上海
obj1.myFun.bind(db,'成都','上海')();       // 德玛 年龄 99  来自 成都去往上海

call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,传null或undefined 默认指向 window ,第二个参数差别就来了:

call 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔,直接放到后面 obj.myFun.call(db,'成都', ... ,'string' )。

apply 的所有参数都必须放在一个数组里面传进去 obj.myFun.apply(db,['成都', ..., 'string' ])。

bind 除了返回是函数以外,它 的参数和 call 一样。 当然,三者的参数不限定是 string 类型,允许是各种类型,包括函数 、 object 等等!

下面输出什么?


<script type="text/javascript">
  function fn(a,b) {
    this.xxx = 3
    console.log(a,b,this)
  }
  fn(1,2)
  console.log(xxx)

  const obj = {m:0}
  fn.call(obj,1,2)

  fn.apply(obj,[1,2])
  fn.apply(null,[1,2])
  fn.apply(undefined,[1,2])
  fn.apply('12',[1,2])
  fn.apply('',[1,2])
  fn.apply(12,[1,2])
  fn.apply([1,2])














  // 结果
  // 1 2 Window 
  //  3
  //  1 2 {m: 0, xxx: 3}
  // 1 2 {m: 0, xxx: 3}
  1 2 Window 
  1 2 Window 
  1 2 String {"12", xxx: 3}
  1 2 String {"", xxx: 3}
  1 2 Number {12, xxx: 3}

  undefined undefined (2) [1, 2, xxx: 3]
</script>



Edit this page
最近更新: 2025/6/27 02:24
Contributors: qdleader
qdleader
本站总访问量 129823次 | 本站访客数 12人