JavaScript this指向与改变this指向

this指向
/*
函数在 定义/声明 的时候是不知道this指向的
只有在执行的时候才有this这个概念
*/
function fn(){
  console.log(this);
}

fn();//函数自执行的情况下this指向window

document.onclick = fn; //事件触发时指向事件的主体,this指向document对象

var obj = {
	fn : function(){
		console.log(this);
	}
}
obj.fn();//此时由对象obj调用的函数,不是函数自执行,this指向obj
改变this指向
  1. call
  2. apply
  3. bind
function fn(){
  console.log(this);
}

fn();//自执行,this->window

/* 1. 通过call改变this指向,传入的第一个实参为this的指向 */ 
fn.call( document );//this->document

/* 2. apply */
fn.apply( document );//this->document

/* 3.bind 不兼容IE8及以下  */
fn.bind(document);//不帮助函数自执行,不会打印

//正确用法
var x = fn.bind(document);//bind返回一个新的fn函数,但this指向传入的参数
x();//此时this->document
三种方法的传参方式
function sum (a,b){
  console.log(this);
  console.log(a + b);
}

sum.call(oWarp,2,5);//传入的第一个实参为this指向,此时this指向oWarp

sum.apply(oWarp,[2,5]);//apply形参使用数组传

// call和apply的返回值即fn的返回值

var = fn.bind(null,2,5);
x();
bind的柯里化
/*
	柯里化: 降低函数的适用范围,提高函数的适用性
*/
//bind的作用之一 : 固定参数
function fn(a,b,c){
  console.log(this);
  console.log(a + b + c);
}

var x = fn.bind(null,1,2);//a固定是1,b固定是2
x(3);//传入的3是c
//只适用于a是1,b是2,但c可变的情况下
例子
var obj = {name: "zhangsan"};
function fn(){
  console.log(this);
}

//document.onclick = fn.call(obj);//错误,call会自执行后返回

/*正确写法*/
document.onclick = function(){
  fn.call(obj);
} 
//或
document.onclick = fn.bind(obj);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值