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 相关文章推荐
img标签中onerror用法
Aug 13 Javascript
javascript Event对象详解及使用示例
Nov 22 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
Dec 06 Javascript
jQuery使用andSelf()来包含之前的选择集
May 19 Javascript
jQuery源码分析之jQuery中的循环技巧详解
Sep 06 Javascript
推荐25个超炫的jQuery网格插件
Nov 28 Javascript
从0开始学Vue
Oct 27 Javascript
微信小程序 地图(map)实例详解
Nov 16 Javascript
JavaScript之json_动力节点Java学院整理
Jun 29 Javascript
浅谈ng-zorro使用心得
Dec 03 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
Mar 07 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
Jul 16 jQuery
实现高性能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模板技术[转]
2007/01/04 PHP
php上传文件的增强函数
2010/07/21 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
PHP_Cooikes不同页面无法传递的解决方法
2014/03/07 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
2018/12/06 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
Jquery 数组操作大全个人总结
2013/11/13 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
Javascript中实现trim()函数的两种方法
2015/02/04 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
js实现批量删除功能
2020/08/27 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
2018/02/08 Python
Python2.7.10以上pip更新及其他包的安装教程
2018/06/12 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
AHAVA美国官方网站:死海海泥护肤品牌
2016/10/18 全球购物
香港通票:Hong Kong Pass
2019/02/26 全球购物
银行学习十八大感想
2014/01/11 职场文书
青年教师典范事迹材料
2014/01/31 职场文书
医院院务公开实施方案
2014/05/03 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
python 网络编程要点总结
2021/06/18 Python