this
我的理解
this
指向当前函数的主人- this指向的是当前函数的作用域(对象实例)
this.变量
就是指向某个环境,规定变量在指向的环境中去寻找.这个环境就是当前函数的主人
常见的this
1.默认的this
绑定, 就是说 在一个函数中使用了this
, 但是没有为this
绑定对象. 这种情况下, 非严格默认,this
就是全局变量 Node 环境中的 global, 浏览器环境中的 window.
function show(){
console.log(this)//this指向Window
}
2. 函数 show
中的this
绑定到 person
对象.
show()
函数由person来调用.this
指的就是对象person
let person = {
name: "小明",
show: function(){
console.log(this.name)
}
person.show()//输出小明,因为this.name就是person.name
}
- 显示绑定:
foo.call(obj, ...), foo.apply(obj,[...]), foo.bind(obj,...)
- 构造绑定:
new foo()
, 这种情况, 无论 foo 是否做了绑定, 都要创建一个新的对象, 然后foo
中的this
引用这个对象.
强制数据类型转换
.call()
格式:
.call()
参数:
- 第一个参数:传入该函数指向的对象this,传入什么强制指向什么
- 第二个参数:将原函数的参数顺延一位
function show(x,y){
console.log(this)
console.log(x+y)
}
show(1,2)//输出Window和3
show.call("call",1,2)//改变this的指向,this指向字符串this
使用 call 和 apply 函数的时候要注意,如果传递给 this 的值不是一个对象,JavaScript 会尝试使用内部 ToObject 操作将其转换为对象。
.apply()
和call
的唯一区别是参数变为数组
.bind
- 预设
this
的指向 - 下图中show,bind(“call”)变成了一个函数
show.bind('call')//返回一个函数,这个函数的this指向'call'
原函数的this不变