前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS中的bind、apply、call的理解

JS中的bind、apply、call的理解

作者头像
码客说
发布2020-05-09 14:53:34
9260
发布2020-05-09 14:53:34
举报
文章被收录于专栏:码客码客

概要

call、apply、bind 都是用来修改函数中的this,

传参时,call是一个个传参,apply是数组形式传参,call和apply立即执行并且返回值是你调用的方法的返回值,若该方法没有返回值,则返回undefined。

bind是改变this后返回一个新的函数,他不会立即执行。 这三个方法不会改变原方法的this的指向。

Bind

复制原方法传入新的this指向后生成新方法,参数可传多个。

代码语言:javascript
复制
let a = {
    name: "小明",
    play: function(name) {
        console.info(this.name + "和" + name + "一块玩");
    }
};

let b = {
    name: "小红"
};

a.play("小刚");
a.play.bind(b)("小刚");

显示

代码语言:javascript
复制
小明和小刚一块玩
小红和小刚一块玩

Call

调用原方法传入新的this指向,第一个参数为this的指向对象,后面可传多个参数。

代码语言:javascript
复制
let a = {
    name: "小明",
    play: function(name1, name2) {
        console.info(this.name + "和" + name1 + "、" + name2 + "一块玩");
    }
};

let b = {
    name: "小红"
};

a.play("小刚", "小李");
a.play.call(b, "小刚", "小李");

显示

代码语言:javascript
复制
小明和小刚、小李一块玩
小红和小刚、小李一块玩

Apply

调用原方法传入新的this指向,第一个参数为this的指向对象,第二个参数只能为一个数组。

代码语言:javascript
复制
let a = {
    name: "小明",
    play: function(name1, name2) {
        console.info(this.name + "和" + name1 + "、" + name2 + "一块玩");
    }
};

let b = {
    name: "小红"
};

a.play("小刚", "小李");
a.play.apply(b, ["小刚", "小李"]);

显示

代码语言:javascript
复制
小明和小刚、小李一块玩
小红和小刚、小李一块玩

结论:

call、apply、bind 是Function.prototype下的方法,作用是执行一下目标函数,执行时顺便把目标函数中的this改一下,然后把结果输出,执行后,不会影响原函数中的this!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概要
  • Bind
  • Call
  • Apply
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档