JavaScript中的this机制


Posted in Javascript onJanuary 30, 2016

JavaScript有自己的一套this机制,在不同情况下,this的指向也不尽相同。

全局范围

console.log(this); //全局变量

全局范围使用this指向的是全局变量,浏览器环境下就是window。

注:ECMAScript5的strict模式不存在全局变量,这里的this是undefined。

函数调用中

function foo() {
  console.log(this);
}

foo(); //全局变量

函数调用中的this也指向全局变量。

注:ECMAScript5的strict模式不存在全局变量,这里的this是undefined。

对象方法调用

var test = {
  foo: function () {
    console.log(this);
  }
}

test.foo(); //test对象

对象方法调用中,this指向调用者。

var test = {
  foo: function () {
    console.log(this);
  }
}

var test2 = test.foo;
test2(); //全局变量

不过由于this的晚绑定特性,在上例的情况中this将指向全局变量,相当于直接调用函数。

这点非常重要,同样的代码段,只有在运行时才能确定this指向

构造函数

function Foo() {
  console.log(this);
}

new Foo(); //新创建的对象
console.log(foo);

在构造函数内部,this指向新创建的对象。

显式设置this

function foo(a, b) {
  console.log(this);
}

var bar = {};

foo.apply(bar, [1, 2]); //bar
foo.call(1, 2); //Number对象

使用Function.prototype的call或者apply方法是,函数内部this会被设置为传入的第一个参数。

Javascript 相关文章推荐
JS BASE64编码 window.atob(), window.btoa()
Mar 09 Javascript
js判断输入是否为正整数、浮点数等数字的函数代码
Nov 17 Javascript
javascript中this做事件参数相关问题解答
Mar 17 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
Jun 06 Javascript
简单介绍JavaScript的变量和数据类型
Jun 03 Javascript
javascript中的五种基本数据类型
Aug 26 Javascript
Bootstrap 模态框实例插件案例分析
Dec 28 Javascript
原生js实现放大镜效果
Jan 11 Javascript
详解Vue.use自定义自己的全局组件
Jun 14 Javascript
Node 自动化部署的方法
Oct 17 Javascript
vue无限轮播插件代码实例
May 10 Javascript
如何基于viewport vm适配移动端页面
Nov 13 Javascript
实现高性能JavaScript之执行与加载
Jan 30 #Javascript
深入探秘jquery瀑布流的实现
Jan 30 #Javascript
深入分析Javascript事件代理
Jan 30 #Javascript
详解javascript实现瀑布流列式布局
Jan 29 #Javascript
详解javascript实现瀑布流绝对式布局
Jan 29 #Javascript
理解Javascript文件动态加载
Jan 29 #Javascript
JavaScript操作select元素和option的实例代码
Jan 29 #Javascript
You might like
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
2012/07/31 PHP
php启用zlib压缩文件的配置方法
2013/06/12 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
js图片上传前预览功能(兼容所有浏览器)
2016/08/24 Javascript
jQuery控制控件文本的长度的操作方法
2016/12/05 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
详解Nodejs之npm&package.json
2017/06/15 NodeJs
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
如何修改Vue打包后文件的接口地址配置的方法
2020/04/22 Javascript
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
python持久性管理pickle模块详细介绍
2015/02/18 Python
详解Python的Django框架中的中间件
2015/07/24 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
python中实现控制小数点位数的方法
2019/01/24 Python
使用python对多个txt文件中的数据进行筛选的方法
2019/07/10 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
html5如何及时更新缓存文件(js、css或图片)
2013/06/24 HTML / CSS
党的群众路线教育实践活动学习心得体会
2014/03/03 职场文书
2016新年致辞
2015/08/01 职场文书
Golang的继承模拟实例
2021/06/30 Golang