资讯专栏INFORMATION COLUMN

call、apply、bind的用法小结

woshicixide / 2255人阅读

摘要:新手经常犯的一个错误是将一个方法从对象中拿出来,然后再调用,希望方法中的是原来的对象。如果不做特殊处理的话,一般会丢失原来的对象。

call、apply、bind是JavaScript中Function函数自带的方法,主要用于改变this的指向 区别: call()

1.语法:

fun.call(this, arg1,arg2)

2.this取值的几点说明:

(1)处于非严格模式下,指定为null和undefined的this值会自动指向全局对象(浏览器中就是window对象)

严格模式下:

(2) 如果call方法的参数是一个原始值,那么这个原始值会自动转成对应的包装对象,然后传入call方法

(3)传递一个对象,则this指向这个对象

apply()

apply方法的作用与call方法类似,也是改变this指向,然后再调用该函数。
唯一的区别就是,它接收一个数组作为函数执行时的参数。

1.语法:

fun.apply(this,[arg1,arg2...])

2.几个小应用:

(1)结合Math.max()找出数组最大项

(2)结合slice()将伪数组转化为数组

啥叫伪数组:

i.有 0,1,2,3,4,5...n,length 这些 key 的对象;
ii.原型链中没有 Array.prototype(如arguments对象,公有属性是Object.prototype)

目前已知的伪数组:

i.arguments对象;
ii.由document.querySelectAll()返回的对象

运用:

bind()

1.语法:

fun.bind(thisArg[, arg1[, arg2[, ...]]])

2.MDN文档关于bind()的用法描述

bind() 最简单的用法是创建一个函数,使这个函数不论怎么调用都有同样的 this 值。JavaScript新手经常犯的一个错误是将一个方法从对象中拿出来,然后再调用,希望方法中的 this 是原来的对象。(比如在回调中传入这个方法。)如果不做特殊处理的话,一般会丢失原来的对象。从原来的函数和原来的对象创建一个绑定函数,则能很漂亮地解决这个问题
var a = 18;
var x = {
    a: 81,
    getA: function() {
        return this.a
    }
};

x.getA(); // 81

var b = x.getA;
b(); // 18(在这种情况下,this指向全局作用域)

// 用bind()创建一个新函数,使this指向x对象
var bGetA = b.bind(x);
bGetA(); // 返回 81

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/107221.html

相关文章

  • 理解 JavaScript call()/apply()/bind()

    摘要:理解文章中已经比较全面的分析了在中的指向问题,用一句话来总结就是的指向一定是在执行时决定的,指向被调用函数的对象。与和直接执行原函数不同的是,返回的是一个新函数。这个新函数包裹了原函数,并且绑定了的指向为传入的。 理解 JavaScript this 文章中已经比较全面的分析了 this 在 JavaScript 中的指向问题,用一句话来总结就是:this 的指向一定是在执行时决定的,...

    duan199226 评论0 收藏0
  • 全面解析this

    摘要:在严格模式下,对象的函数中的指向调用函数的对象实例显式绑定,,通过可以把的绑定到上。间接引用最容易在赋值时发生返回目标函数的引用词法之前介绍的种绑定规则可以包含所有正常的函数,但是中介绍了一种无法使用这些规则的特殊函数类型箭头函数。 this到底指向什么? this关键词是javaScript中最复杂的机制之一,一般有两个误区:1.this指向函数自身;2.this指向函数的作用域; ...

    Y3G 评论0 收藏0
  • bind()、call()、apply()理解及用法

    摘要:首先,我们判断是否存在方法,然后,若不存在,向对象的原型中添加自定义的方法。指向调用它的对象。总之三个的使用区别都是用来改变函数的对象的指向的第一个参数都是要指向的对象都可以利用后续参数传参是返回对应函数,便于稍后调用,是立即调用 apply和call都是为了改变某个函数运行时的上下文而存在的(就是为了改变函数内部this的指向),Function对象的方法,每个函数都能调用; 使用a...

    hoohack 评论0 收藏0
  • JavaScript 中 callapplybind 用法和区别

    摘要:和类似,都是调用函数,并指定函数的值和参数,区别在于传入参数是通过参数列表的形式,传入参数是通过数组的形式方法与前两个不同,它创建一个新的函数,在调用新函数时,会调用原函数,并指定原函数的值和参数。执行的时候并没有调用函数。 简介 JavaScript 中有三个方法Function.prototype.call()、Function.prototype.apply()和Function...

    wind3110991 评论0 收藏0
  • 复习javascript中call,apply,bind用法

    摘要:绑定函数被调用时,也接受预设的参数提供给原函数。一个绑定函数也能使用操作符创建对象这种行为就像把原函数当成构造器。 一直很难理解js中的call apply bind,在w3schools,mdn阅读了,也看了很多相关的文章,今天我来写下我理解的call apply bind 首先创建一个函数 function man(){} man.prototype = { name: ...

    darryrzhong 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<