this指向方法
this指向:
-
谁调用就指向谁
-
注:this只能指向对象
-
例:
<div>点击事件</div>
<script>
console.log(this)//this指向window
// 在JS事件中,那个对象触发的事件:就指向那个对象
var div=document.getElementsByTagName("div")[0];
div.onclick=function(){
console.log(this) // this指向div
}
</script>
改变this指向的三种方法:
- call()和apply()和bind()
- 需要注意的是
bind
是返回新的函数,以便稍后调用;apply
、call
则是立即调用原函数
- call()&apply()方法:
-
当函数通过Function对象的原型中继承的方法 call() 和 apply() 方法调用时, 其函数内部的this值可绑定到 call() & apply() 方法指定的第一个对象上, 如果第一个参数不是对象,JavaScript内部会尝试将其转换成对象然后指向它。
例子:
function foo(){ console.log(this.fruit); } // 定义一个全局变量,等同于window.fruit = "banana"; var fruit = "banana"; var o = { fruit : "apple" }; foo.apply(window); // "banana"; foo.call(o); // "apple";
apply和call的唯一区别,就是在传参的时候,apply的参数需要放在一个数组里面,而call不需要;
- bind方法():
-
bind()方法创建一个新的函数(称为绑定函数), 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。
- 何时使用: 在创建方法时,就需要提前绑定this对象和参数值
如何使用: 2步:
- 使用bind方法,基于现有函数创建新函数,并绑定this对象和部分参数值:
var newFun=fun.bind(obj[,参数1,参数2,…]) - 调用newFun,传入剩余参数: newFun(剩余参数)
- 何时使用: 在创建方法时,就需要提前绑定this对象和参数值
-
bind() 方法使用例子:
function a(){ return Array.prototype.slice.call(arguments);//将类数组转换成真正的数组 } var b=a.bind(this,15,20) alert(b());//弹出 15,20 var s=b(25,30); alert(s);//弹出 15,20,25,30 ```