资讯专栏INFORMATION COLUMN

JavaScript 的 this 和 apply call bind

lolomaco / 1140人阅读

摘要:是谁,在函数运行时才能确定,谁调用了函数谁就是,就是调用者例如是是调用了函数,所以函数中的就是调用者是同理什么是全局对象,浏览器的全局对象是,中全局对象是在浏览器中直接调用一个函数,那么就是调用者是例如是的作用,中函数是一个对象,所以函数可

this 是谁

1,this 在函数运行时才能确定
2,谁调用了函数谁就是 this
3,this 就是调用者

例如

var o1 = {
  name: "o1",
}
var o2 = {
  name: "o2",
}
o1.hello = function() {
  console.log("this 是,", this)
}
o2.hello = function() {
  console.log("this 是, ", this)
}
o1.hello()
o2.hello() 

o1 调用了 hello 函数,所以 hello 函数中的 this 就是 o1(调用者是 o1
o2 同理

什么是全局对象

1,浏览器的全局对象是 window
2,node.js 中全局对象是 global

在浏览器中直接调用一个函数,那么 this 就是 window (调用者是 window

例如

var hello = function() {
  console.log("this 是,", this)
}
hello()

apply call bind 的作用

1,JavaScript 中函数是一个对象,所以函数可以有方法
2,apply call bind 都是函数的方法,用来给函数指定 this

apply

1,apply 接受两个参数
2,第一个参数为函数里的 this
3,第二个参数为要传给函数的参数列表,(这个参数列表可以当做是个数组来理解,实际上不是数组
4,apply 会把这个参数列表拆成一个个的参数传给函数

例如

console.log.apply(console, arguments)

这行代码把 log 函数的 this 指定为 cosnole.log

var arguments = [1, 2, 3]
console.log.apply(console, arguments)
// 相当于 
console.log(1, 2, 3)

call

call 和 apply 类似,区别是 call 只能把参数一个个传入

例如

console.log.call(console, 1, 2, 3)
// 相当于 
console.log(1, 2, 3)

bind

1,bind 只能返回一个函数让你调用
2,bind 的第一个参数为函数里的 this
3,bind 还可以有额外的参数

例如

var log = console.log.bind(console, "这里是额外参数")
log("hello")

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

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

相关文章

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

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

    duan199226 评论0 收藏0
  • JavaScript函数callapplybind

    摘要:它们有明确的和成员函数的定义,只有的实例才能调用这个的成员函数。用和调用函数里用和来指定函数调用的,即指针的指向。同样,对于一个后的函数使用或者,也无法改变它的执行,原理和上面是一样的。 函数里的this指针 要理解call,apply和bind,那得先知道JavaScript里的this指针。JavaScript里任何函数的执行都有一个上下文(context),也就是JavaScri...

    alighters 评论0 收藏0
  • JS中callapplybind方法详解

    摘要:不能应用下的等方法。首先我们可以通过给目标函数指定作用域来简单实现方法保存,即调用方法的目标函数考虑到函数柯里化的情况,我们可以构建一个更加健壮的这次的方法可以绑定对象,也支持在绑定的时候传参。原因是,在中,多次是无效的。 bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。 apply、call 在 javascript 中,call 和 apply 都是...

    zombieda 评论0 收藏0
  • JS基础篇--callapplybind方法详解

    摘要:首先我们可以通过给目标函数指定作用域来简单实现方法保存,即调用方法的目标函数考虑到函数柯里化的情况,我们可以构建一个更加健壮的这次的方法可以绑定对象,也支持在绑定的时候传参。原因是,在中,多次是无效的。而则会立即执行函数。 bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。 apply、call 在 javascript 中,call 和 apply 都是...

    lastSeries 评论0 收藏0
  • javascript关于this 以及this显示设置(applycallbind)

    摘要:如果连续呢结果会是什么结果还是第一个原因是,在中,多次是无效的。更深层次的原因,的实现,相当于使用函数在内部包了一个,第二次相当于再包住第一次故第二次以后的是无法生效的。 this 1.其实js中的this没那么难理解,当找不到this时记住一句话:谁调我,我就指谁!new 谁指谁 function text1(){ console.log(this); //指wind...

    LiveVideoStack 评论0 收藏0
  • call,apply and bind in JavaScript

    摘要:文章尽量使用大量实例进行讲解,它们的使用场景。在严格模式下,函数被调用后,里面的默认是后面通过调用函数上的和方法,该变指向,函数里面的指向。利用,可以传入外层的上下文。同样适用的还有,里面的对象,它也是一种类数组对象。 call,apply and bind in JavaScript 在ECMAScript中,每个函数都包含两个继承而来的方法:apply() 和 call(),这两个...

    JohnLui 评论0 收藏0

发表评论

0条评论

lolomaco

|高级讲师

TA的文章

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