js中this的指向问题归纳总结


Posted in Javascript onNovember 28, 2018

前言

js中this指向问题是个老生常谈的问题了,下面这篇文章再来给大家介绍下,大家可以看看,更深入的了解了解,下面话不多说了,来一起看看详细的介绍吧

this

this:上下文,会根据执行环境变化而发生指向的改变.

1.单独的this,指向的是window这个对象

alert(this); // this -> window

2.全局函数中的this

function demo() {
 alert(this); // this -> window
}
demo();

在严格模式下,this是undefined.

function demo() {
 'use strict';
 alert(this); // undefined
}
demo();

3.函数调用的时候,前面加上new关键字

所谓构造函数,就是通过这个函数生成一个新对象,这时,this就指向这个对象。

function demo() {
 //alert(this); // this -> object
 this.testStr = 'this is a test';
}
let a = new demo();
alert(a.testStr); // 'this is a test'

4.用call与apply的方式调用函数

function demo() {
 alert(this);
}
demo.call('abc'); // abc
demo.call(null); // this -> window
demo.call(undefined); // this -> window

5.定时器中的this,指向的是window

setTimeout(function() {
 alert(this); // this -> window ,严格模式 也是指向window
},500)

6.元素绑定事件,事件触发后,执行的函数中的this,指向的是当前元素

window.onload = function() {
 let $btn = document.getElementById('btn');
 $btn.onclick = function(){
 alert(this); // this -> 当前触发
 }
}

7.函数调用时如果绑定了bind,那么函数中的this指向了bind中绑定的元素

window.onload = function() {
 let $btn = document.getElementById('btn');
 $btn.addEventListener('click',function() {
 alert(this); // window
 }.bind(window))
}

8.对象中的方法,该方法被哪个对象调用了,那么方法中的this就指向该对象

let name = 'finget'
let obj = {
 name: 'FinGet',
 getName: function() {
 alert(this.name);
 }
}
obj.getName(); // FinGet
---------------------------分割线----------------------------
let fn = obj.getName;
fn(); //finget this -> window

腾讯笔试题

var x = 20;
var a = {
 x: 15,
 fn: function() {
 var x = 30;
 return function() {
  return this.x
 }
 }
}
console.log(a.fn());
console.log((a.fn())());
console.log(a.fn()());
console.log(a.fn()() == (a.fn())());
console.log(a.fn().call(this));
console.log(a.fn().call(a));

答案

1.console.log(a.fn());

对象调用方法,返回了一个方法。

# function() {return this.x}

2.console.log((a.fn())());

a.fn()返回的是一个函数,()()这是自执行表达式。this -> window

# 20

3.console.log(a.fn()());

a.fn()相当于在全局定义了一个函数,然后再自己调用执行。this -> window

# 20

4.console.log(a.fn()() == (a.fn())());

# true

5.console.log(a.fn().call(this));

这段代码在全局环境中执行,this -> window

# 20

6.console.log(a.fn().call(a));

this -> a

# 15

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
Jun 29 Javascript
javascript学习笔记(三)显示当时时间的代码
Apr 08 Javascript
JS获得URL超链接的参数值实例代码
Jun 21 Javascript
深入理解Javascript里的依赖注入
Mar 19 Javascript
学习使用AngularJS文件上传控件
Feb 16 Javascript
浅谈javascript中的constructor
Jun 08 Javascript
js实现用户输入的小写字母自动转大写字母的方法
Jan 21 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
Apr 27 Javascript
Vue前后端不同端口的实现方法
Sep 19 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
May 19 Javascript
node+vue实现文件上传功能
May 28 Javascript
javascript实现倒计时提示框
Mar 02 Javascript
基于vue实现移动端圆形旋钮插件效果
Nov 28 #Javascript
VUE2.0 ElementUI2.0表格el-table自适应高度的实现方法
Nov 28 #Javascript
Vue触发式全局组件构建的方法
Nov 28 #Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
Nov 28 #Javascript
jQuery实现购物车的总价计算和总价传值功能
Nov 28 #jQuery
vue与原生app的对接交互的方法(混合开发)
Nov 28 #Javascript
vue微信分享出来的链接点开是首页问题的解决方法
Nov 28 #Javascript
You might like
使用php判断浏览器的类型和语言的函数代码
2013/02/28 PHP
测试php函数的方法
2013/11/13 PHP
PHP中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
laravel orm 关联条件查询代码
2019/10/21 PHP
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
js实现倒计时及时间对象
2016/11/15 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
2017/04/01 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
JavaScript实现手风琴效果
2021/02/18 Javascript
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
用Python设计一个经典小游戏
2017/05/15 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
python psutil监控进程实例
2019/12/17 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
python tkinter实现连连看游戏
2020/11/16 Python
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
不同浏览器创建XMLHttpRequest方法有什么不同
2014/11/17 面试题
国培远程培训感言
2014/03/08 职场文书
捐书活动总结
2014/05/04 职场文书
大学生求职信例文
2014/06/29 职场文书
老人节主持词
2015/07/04 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
Python Socket编程详解
2021/04/25 Python
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers