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 相关文章推荐
JavaScript中常见陷阱小结
Apr 27 Javascript
iframe异步加载实现点击左边菜单加载右边内容实例讲解
Mar 04 Javascript
使用 Node.js 做 Function Test实现方法
Oct 25 Javascript
jquery使用animate方法实现控制元素移动
Mar 27 Javascript
移动端JQ插件hammer使用详解
Jul 03 Javascript
jQuery中fadein与fadeout方法用法示例
Sep 16 Javascript
Bootstrap选项卡动态切换效果
Nov 28 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
Aug 31 Javascript
Node.js应用设置安全的沙箱环境
Apr 23 Javascript
原生js生成图片验证码
Oct 11 Javascript
vue.js watch经常失效的场景与解决方案
Jan 07 Vue.js
vue 使用饿了么UI仿写teambition的筛选功能
Mar 01 Vue.js
实现高性能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
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
Yii2 assets清除缓存的方法
2016/05/16 PHP
php+jQuery递归调用POST循环请求示例
2016/10/14 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
javaScript同意等待代码实现心得
2011/01/01 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
Javascript冒泡排序算法详解
2014/12/03 Javascript
JavaScript不使用prototype和new实现继承机制
2014/12/29 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
通过一个简单的例子学会vuex与模块化
2017/11/22 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
python生成日历实例解析
2014/08/21 Python
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
Python根据成绩分析系统浅析
2019/02/11 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
Python读写文件模式和文件对象方法实例详解
2019/09/17 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
CSS3属性使网站设计增强同时不消弱可用性
2009/08/29 HTML / CSS
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
JD Sports荷兰:英国领先的运动时尚零售商
2020/03/13 全球购物
李维斯牛仔裤荷兰官方网站:Levi’s NL
2020/08/23 全球购物
一套.net面试题及答案
2016/11/02 面试题
一套Delphi的笔试题二
2013/05/11 面试题
城管综合整治方案
2014/05/01 职场文书
差生评语大全
2014/05/04 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
部门优秀员工推荐信
2015/03/24 职场文书
2015年助残日活动总结
2015/03/27 职场文书
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers