JavaScript的this
指向
Js,函数的调用方式决定this
的值
function f1(){
console.log(this)
}
f1() // window
bind
,apply
,call
可以更改this
的指向
call()
call()
第一个参数是指向的对象,当为null
或undefined
时指向window
;第二个是传递的参数(任意类型)
function f1(){
console.log(this)
}
var obj = {}
f1.call(obj) // obj
f1()//window
apply()
apply()
和call()
类似,但第二个参数需要为按顺序的数组。
function f1(){
console.log(this)
}
var obj = {}
f1.apply(obj,[])//obj
f1()//window
bind()
bind()
参数与call()
相同,但不会立刻执行,而是返回绑定新this
的对象。
function f1(){
console.log(this)
}
var obj = {}
var i = f1.bind(obj)
i()//obj
手写call()
Function.prototype.myCall(content){
content = content || window
content.fn = this
var arg = [...content].slice(1)
let result = content.fn(...arg)
delete content.fn
return result
}
手写apply()
Function.prototype.myApply(content){
content = content || window
content.fn = this
let result
if(arguments[1]){
result = content.fn(...arguments[1])
}else{
result = content.fn()
}
delete content.fn
retuern result
}
手写bind()
Function.prototype.myBind(content){
let that = this
//支持柯里化
let arg = [...arguments].slice(1)
return function(){
//支持柯里化
let args = [...arg]
return that.apply(content,arg.conact(args))
}