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
给每一个函数分配了call
,apply
两个玉人函数手下,
这美人计还真有效,每一个函数都成了裙下之臣,乖乖实行对象安排的使命。
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之剑传说我们临时先说到这吧,欲知后事,下回分解。