JS中关于this的理解

JavaScript:this是什么?

定义:this是包含它的函数作为方法被调用时所属的对象。

看定义有点懵……

先来看一个题目:
//以下代码输出什么?为什么?
var number = 50;
var obj = {
	number: 60,
	getNum: function () {
		var number = 70;
		return this.number;
	}
};
console.log(obj.getNum());  //60
console.log(obj.getNum.call()); //<=> obj.getNum.call(window)   输出:50
console.log(obj.getNum.call({number:20}));  //20
(1)this -> obj
  getNum()被调用,被谁调用?被obj调用,所以this指向的是obj对象,所以此时输出60
(2)this -> window
  call方法是什么?它可以用来改变this的指向,同时还有一个apply(),它和call()是一样,区别我们下面再说。
  此时this默认绑定在window,所以输出50
(3)this -> {number : 20}
  此时this绑定在对象 {number:20} 上,所以输出20

call方法调用示例:
window.color = 'red';
document.color = 'yellow';

var s1 = {color: 'blue' };
function changeColor(){
	console.log(this.color);
}

changeColor.call();         //red (默认传递参数)
changeColor.call(window);   //red
changeColor.call(document); //yellow
changeColor.call(this);     //red
changeColor.call(s1);       //blue
call()与apply()的区别:

* 接收参数的方式不同(接收两个参数的时候,第一个参数一样[作用域],第二个参数不同)

call() - 一个个列举出来
apply() - 数组
function fn(c,d){
	return this.a + this.b + c + d;
}

var s = {a:1, b:2};
console.log(fn.call(s,3,4)); // 1+2+3+4 = 10
console.log(fn.apply(s,[5,6])); // 1+2+5+6 = 14
总结:

一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向。

this绑定有四种情况;
    默认绑定:函数独立调用时,this默认绑定到window
    隐式绑定:看函数调用栈,上一个的栈点就是this,console.trace()可查看函数的调用关系
    显式绑定:如call,apply,bind,this指向绑定对象
    new绑定:this指向new出来的对象
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值