call,apply,bind用法

作者: 饥人谷_黄洪涛 | 来源:发表于2018-06-29 23:51 被阅读3次

title: call,apply,bind用法
date: 2018-05-28 23:00:00
tags: call apply bind
categories: 前端


call

var obj = {
   name: 'hht',
   age : 1
}

function f(name,age){
  this.name = name;
  this.age = age;
  console.log(this.name);
  console.log(this.age);
}

f.call(obj,'mmd',18);
image
  • call()方法调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表).
  • call 的第一个参数是指定调用的这个函数的this ,非严格模式下this的值如果是null或者undefine ,那么这个this指向window
  • call 第二个以及之后的参数就是我们的arguments的值

apply

var obj = {
   name: 'hht',
   age : 1
}

function f(name,age){
  this.name = name;
  this.age = age;
  console.log(this.name);
  console.log(this.age);
}

f.apply(obj,['mmd',18]);
f.apply(obj,{0: 'mmd', 1: 18, length: 2});
image
  • call()方法的作用和 apply() 方法类似,只有一个区别,就是 call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组, 或伪数组。

bind

var obj = {
   name: 'hht',
   age : 1
}

function f(){
  for(let i = 0; i < 4; i++)
  {
    console.log(arguments[i]);
  }
  console.log(this);
}

var f1Bind = f.bind(obj,'hht',18);
f1Bind();
f1Bind(1,2);
image
  • bind 绑定时接受的参数跟 call 一致.
  • bind 不会立即调用,它会生成一个新的函数,你想什么时候调就什么时候调。
  • bind 绑定好的this不会改变
  • bind 绑定时的给的参数会成为这个绑定函数的固定参数,调用这个函数时这几个参数一定会在

相关文章

网友评论

    本文标题:call,apply,bind用法

    本文链接:https://www.haomeiwen.com/subject/kgvzyftx.html