this指向的问题
概念: this指向的对象称为函数的上下文对象context
this的的指向取决函数别调用方式
当面试官问你this指向哪里,直接告诉他不知道,原因:谁调用指向谁,函数都没被调用,确实不知道!!
call 方法
语法: call (thisobj,obj)
定义 :调用一个对象的一个方法,一另一个替换当前对象
说明:
call方法可以用来代替另一个对象有个方法。call可将一个函数对象的上下文从初始上下文改变为thisobj指向新对象 。如果没有提供thisobj参数,那么就是调用它本身。
apply 方法
语法 :apply (thisobj,[argArray])
定义:应用某一个对象的一个方法,用另一个对象替换当前对象
说明:
如果argArray,不是一个有效的数组或者不是argments,那么将会导致一个TypeError。如果没有提供argArray和thisobj任何一个参数 ,那么就会调用本身。
bind 方法
它会创建一个函数的实例,其this值会被绑定到传给bind()函数的值
例子:
window.color='red';
var o={color:'blue'};
function sayColor(){
console.log(this.color);
}
var objectSaycolor=sayColor.bind(o);
//var objectSaycolor=sayColor.bind();
objectSaycolor();//blue
在这里sayColor()调用bind()并传入对象o,创建了objectSayColor()函数。objectSayColor()函数的this值等于o,因此即使是在全局作用域中调用这个函数,也会看到blue。
apply ,bind call 区别
-
三者都可以改变函数的this对象指向。
-
不同点:
1apply接受的参数为一个数组,call接收的参数为一个个独立的值;apply,call会直接调用方法,bind改变this的指向返回一个方法不调用。
- - [ ] - [ ]