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 相关文章推荐
Jquery插件之多图片异步上传
Oct 20 Javascript
js选取多个或单个元素的实现代码(用class)
Aug 22 Javascript
js confirm()方法的使用方法实例
Jul 13 Javascript
JavaScript版TAB选项卡效果实例
Aug 16 Javascript
多引号嵌套的变量命名的问题
May 09 Javascript
详解axios在node.js中的post使用
Apr 27 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
Jun 04 Javascript
vue-resource 拦截器(interceptor)的使用详解
Jul 04 Javascript
Vue-Router2.X多种路由实现方式总结
Feb 09 Javascript
vue基于element的区间选择组件
Sep 07 Javascript
微信小程序性能优化之checkSession的使用
Mar 06 Javascript
javascript判断一个变量是数组还是对象
Apr 10 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学习笔记之面向对象编程
2012/12/29 PHP
解析argc argv在php中的应用
2013/06/24 PHP
php中的ini配置原理详解
2014/10/14 PHP
php获取文件后缀的9种方法
2016/03/22 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
JavaScript定义类的几种方式总结
2014/01/06 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
js实现简单选项卡功能
2020/03/23 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
Python使用正则表达式实现文本替换的方法
2017/04/18 Python
django中的setting最佳配置小结
2017/11/21 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
python 编写简单网页服务器的实例
2018/06/01 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
python实现从ftp上下载文件的实例方法
2020/07/19 Python
测绘工程专业个人自我评价
2013/12/01 职场文书
商务主管岗位职责
2013/12/08 职场文书
学校评语大全
2014/05/06 职场文书
售后服务承诺书怎么写
2014/05/21 职场文书
行政求职信
2014/07/04 职场文书
学习张林森心得体会
2014/09/10 职场文书
Python中的程序流程控制语句
2022/02/24 Python
为Centos安装指定版本的Docker
2022/04/01 Servers
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技