前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航

JS 中的 call、apply、bind 方法

首页
2016-12-13 14:55:24
Front-End
JavaScript
  • call()、apply()、bind()都是函数对象的一个方法,它们的作用都是改变函数的调用对象。它的使用极大的简化了代码的调用

# 一、方法定义

  • call方法
  • 语法
fun.call(thisArg[, arg1[, arg2[, ...]]])
@前端进阶之旅: 代码已经复制到剪贴板
  • thisArg:fun函数运行时指定的this值,可能的值为:
    • 不传,或者传null,undefined, this指向window对象
    • 传递另一个函数的函数名fun2,this指向函数fun2的引用 值为原始值(数字,字符串,布尔值),this会指向该原始值的自动包装对象,如 String、Number、Boolean
    • 传递一个对象,函数中的this指向这个对象
  • apply方法

  • 语法:apply([thisObj[,argArray]])

    • 定义:应用某一对象的一个方法,用另一个对象替换当前对象。
    • 说明:apply的第一个参数thisObj和call方法的一样,第二个参数argArray为一个传参数组thisObj如果未传,那么 Global 对象被用作 thisObj
  • bind方法

    • 在ECMAScript5中扩展了叫bind的方法(IE6,7,8不支持)

    • 语法:bind([thisObj[,arg1[, arg2[, [,.argN]]]]])

    • 定义:应用某一对象的一个方法,用另一个对象替换当前对象。

    • 说明:bind的thisObj参数也和call方法一样,thisObj如果未传,那么 Global 对象被用作 thisObj。arg1 … argN可传可不传。如果不传,可以在调用的时候再传。如果传了,调用的时候则可以不传,调用的时候如果你还是传了,则不生效

var person = {
    name:"tsrot",
    age:24,
    sayHello:function(age){
        console.log(this.name);
        console.log(age);
    }
    };
var son = {
 name:"xieliqun"
 };
var boundFunc = person.sayHello.bind(son);
boundFunc(25); 
@前端进阶之旅: 代码已经复制到剪贴板
var boundFunc = person.sayHello.bind(son,25);
boundFunc(); 
@前端进阶之旅: 代码已经复制到剪贴板
var boundFunc = person.sayHello.bind(son,25);
boundFunc(30); 
@前端进阶之旅: 代码已经复制到剪贴板

# 二、call、apply、bind的区别

  • call的arg传参需一个一个传,apply则直接传一个数组
function hello(name,age){
 console.log(name);
  console.log(age);
  }
hello.call(this,"tsrot",24);
hello.apply(this,["tsrot",24]);
fe
  • 一、方法定义
  • 二、call、apply、bind的区别
  • 三、运用场景

← arguments详解OOP之原型与原型链 →