js中this指向问题

this的指向

this是 JavaScript 语言的一个关键字。它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用。

函数中的this总指向调用它的对象,他的指向一共有以下几种

1. 普通函数中的this

function fun1(el){
	console.log(this,el);
}
fun1();
//最普通的函数,实际上在调用时省略了window.  所以这个函数应该是被window调用

普通的函数this谁调用它,this指向谁


2. 对象里面的方法this

var obj = {
	name:'gml',
	age:'18',
	say:function(){
		console.log(this);
	}
}
say()

如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。

var age = 50;
var obj = {
	name:'gml',
	age:'18',
	say:function(){
		console.log(`我是${name},今年${age}`)
	}
}
obj.say()

这时的age等于50

var age = 50;
grow:function(){
	name:'gml',
	age:'18',
	setInterval(function(){
		this.age++;
		console.log(this.age)
		},3000)
	}
}
obj.grow()

这个时候因为有一个全局方法 [setInterval setTimeout等等都是],而全局方法的调用者必定是window,所以这里的age是50开始

var name = "我在window里面";
var obj1 = {
    name : "我是obj1里面的",
    fn(){
        console.log(this);//obj1
        var that = this;
        console.log(that);
        setTimeout(() => {  //箭头函数的this指向继承自父级执行上下文中的this 在声明的时候就已经确定了
            console.log(this.name); //  我是obj1里面的
            console.log(that.name); //  我是obj1里面的
        },1000);
    }
}
obj1.fn();

箭头函数是对象指向里最特殊的,箭头函数的this指向的是他的上一层作用域的this



3. 构造函数中的this

function fn(name,age){
    this.name = name;
    this.age = age;
    console.log(this);
}
fn(lxy,18)

把构造函数当成普通函数调用 this指向和普通函数一样

function add(a,b){
	console.log(this,a,b);
	}
// call和apply-bind中使用第一个参数对this进行冒充
	sadd.apply({name:'lxy',age:18},[6,7]);
// 把bind的第一个参数作为this,创建一个新的参数
	var fn = add.bind({eye:2,leg:2},10,5)
	fn(10,5);
	//函数简化参数的方式称为函数的柯里化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值