JavaScript中this函数使用实例解析

 更新时间:2020年02月21日 11:30:49   作者:JackGIS  
这篇文章主要介绍了JavaScript中this函数使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了JavaScript中this函数使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

普通函数

普通函数中的this,普通函数中的this表示调用此函数时的对象,如下例:

var x=11;
var obj={
 x:22,
 say:function(){
 console.log(this.x)
 }
}
obj.say();
//console.log输出的是22
//调用say函数的是对象obj,所以this指代对象obj,输出的就是obj对象里的x值,即22。

箭头函数

箭头函数中的this,资料上说的箭头函数内部是没有this的,也就是说,箭头函数里面的this会继承自外部的this,下面有个例子,用来详细说明下:

var x=11;
var obj={
 x:22,
 y:this,//window
 say:()=>{
 console.log(this.x);
 }
}
obj.say();
//输出的值为11
console.log(obj.y);
//输出的值为window对象
//obj对象中的this指代的就是window,也就是全局环境,因为箭头函数中的this就会就近找到上一个对象中this所指代的对象,从以上例子可以看出来,obj内部属性y就为obj内部this指代的对象,输出是window。

由于箭头函数不绑定this, 它会捕获其所在(即定义的位置)上下文的this值, 作为自己的this值,

1、所以 call() / apply() / bind() 方法对于箭头函数来说只是传入参数,对它的 this 毫无影响。

2、考虑到 this 是词法层面上的,严格模式中与 this 相关的规则都将被忽略。(可以忽略是否在严格模式下的影响)

因为箭头函数可以捕获其所在上下文的this值 所以

function Person() { 
 this.age = 0; 
 setInterval(() => {
 // 回调里面的 `this` 变量就指向了期望的那个对象了
 this.age++;
 }, 3000);
}

var p = new Person();

两个例子加深印象

普通函数

var a=11
function test1(){
 this.a=22;
 let b=function(){
 console.log(this.a);
 };
 b();
}
var x=new test1();
//输出11

为什么会输出11?因为普通函数中的this指向的是调用它的对象,如果没有直接调用对象,会指向undefined或者window,一般都会指向window,在严格模式下才会指向undefined。上述的例子中,并没有明确的调用对象,而普通函数中的this并不会向上继续找对象,所以直接返回window。

箭头函数

var a=11;
function test2(){
 this.a=22;
 let b=()=>{console.log(this.a)}
 b();
}
var x=new test2();
//输出22

箭头函数中会往上寻找this,直到找到所代表的this为止。例子中,构造函数被实例化成为一个对象x,那x中的this指代的就是对象x本身,所以箭头函数this就代表x对象,x对象内部的a值为22,所以输出22。

总结

1、箭头函数中的this是在声明中就定义好了的,而普通函数中的this则是在调用时定义好的。

2、箭头函数不绑定this, 它会捕获其所在(即定义的位置)上下文的this值, 作为自己的this值。正是因为它没有this,所以也就不能用作构造函数。,

3、若想改变this指向可以用bind方法。bind方法在ES5引入, 在Function的原型链上, Function.prototype.bind。通过bind方法绑定后, 函数将被永远绑定在其第一个参数对象上, 而无论其在什么情况下被调用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 普通js文件里面如何访问vue实例this指针

    普通js文件里面如何访问vue实例this指针

    这篇文章主要介绍了普通js文件里面如何访问vue实例this指针,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 详解javascript脚本何时会被执行

    详解javascript脚本何时会被执行

    这篇文章主要介绍了详解javascript脚本何时会被执行,帮助大家更好的理解和使用JavaScript,感兴趣的朋友可以了解下
    2021-02-02
  • 微信小程序实现签到弹窗动画

    微信小程序实现签到弹窗动画

    这篇文章主要为大家详细介绍了微信小程序实现签到弹窗动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • JavaScript This指向问题详解

    JavaScript This指向问题详解

    这篇文章主要介绍了JavaScript This指向问题详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • JS实现1000以内被3或5整除的数字之和

    JS实现1000以内被3或5整除的数字之和

    今天在技术群里看到一道这样的提:求1000以内被3或5整除的数字之和。小编把我的解决办法分享到脚本之家平台,供大家参考
    2016-02-02
  • 详解Next.js页面渲染的优化方案

    详解Next.js页面渲染的优化方案

    这篇文章主要介绍了详解Next.js页面渲染的优化方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • JS中定时器的使用及页面切换时定时器无法清除问题的解决办法

    JS中定时器的使用及页面切换时定时器无法清除问题的解决办法

    定时器相信大家应该都不陌生,下面这篇文章主要给大家介绍了关于JS中定时器的使用及页面切换时定时器无法清除问题的解决办法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • 微信小程序表单弹窗实例

    微信小程序表单弹窗实例

    这篇文章主要为大家详细介绍了微信小程序表单弹窗实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • JavaScript 日期和时间的格式化方法

    JavaScript 日期和时间的格式化方法

    这篇文章主要介绍了JavaScript 日期和时间的格式化,JavaScript 中的 Date 对象提供了许多方法和属性,可以用于处理日期和时间,根据具体情况选择适合的方法和技巧,需要的朋友可以参考下
    2023-02-02
  • js动态添加表格逐行添加、删除、遍历取值的实例代码

    js动态添加表格逐行添加、删除、遍历取值的实例代码

    最近做项目遇到这样的需求,要求表格添加一行,表格删除一行,表格遍历取值等。下面小编给大家带来了js动态添加表格逐行添加、删除、遍历取值的实例代码,需要的朋友参考下
    2018-01-01

最新评论