this之剑传说

this之剑传说

在javascript国,有个关于this之剑的传说,谁作为挪用点,谁就是this的主人。

挪用点是什么?挪用点就是函数在代码中被挪用的位置

函数是javascript国的执法人员,作为一个人民公仆,当然是那里须要搬那里,而他执法须要一些震慑他人的兵器,this之剑就这样诞生了。
然则函数不能每时每刻都拿着兵器走在大街上吧,所以javascript国法律规定,只要在执法(被挪用)的时刻this之剑才起作用。

你以为this之剑是属于函数的?那就大错特错了,想一想我们适才说的,挪用点才是this的主人,那末谁是挪用点呢?能挪用函数的人还用说吗?当然是javascript国最大的官window了。

不信你尝尝

let name = 'window'
function fn() {
  let name = 'function'
  console.log(`I am ${this.name}`)
}

fn() // I am window

岂非只要一切this的主人都是window了吗?那倒不是,window作为大佬,手下没些小弟那怎样成,
对象就是window的忠厚小弟

name = 'window'
const obj = {
  name: 'obj',
  fn: function () {
    console.log(`I am ${this.name}`)
  }
}

obj.fn() // I am obj

但有时刻,对象旗下的函数才能有限,须要借助window的函数,作为window直属的函数就不愿意了:“我明显是大佬直属的手下,为何要被你个小小的对象挪用,我不服。”因而,window直属的函数就会给对象使绊子,宣泄本身的不满,只如果须要this之剑的时刻,直属函数就百般刁难。

const someThing = 'relax'
function windowFn() {
  console.log(`let me do ${someThing}`)
}

const obj = {
  someThing: 'work',
  objFn: windowFn,
}

obj.objFn() // let me do relax

这可怎样办啊,对象也不是食斋的,你有张良计,我有过墙梯。
对象决议起诉!
window听了这类事,思考了一下,决议运用美人计,window给每一个函数分配了callapply两个玉人函数手下,
这美人计还真有效,每一个函数都成了裙下之臣,乖乖实行对象安排的使命。

const someThing = 'relax'
function windowFn() {
  console.log(`let me do ${someThing}`)
}

const obj = {
  someThing: 'work',
  objFn: windowFn,
}

obj.objFn.call(obj)
obj.objFn.apply(obj)

说到这两大玉人啊,各有各的喜好,虽然做一样的使命,然则收参数的体式格局却不太一样,call喜好一个一个收,apply喜好打包成数组一同收。

关于this之剑传说我们临时先说到这吧,欲知后事,下回分解。

    原文作者:WiessWong
    原文地址: https://segmentfault.com/a/1190000018602412
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞