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扩展Array.prototype.indexOf引发的问题及解决办法
Jan 21 Javascript
基于jquery实现放大镜效果
Aug 17 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
Dec 24 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
Jul 12 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
Aug 01 Javascript
Vue.js中数据绑定的语法教程
Jun 02 Javascript
JavaScript的六种继承方式(推荐)
Jun 26 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
Oct 30 Javascript
ES6入门教程之变量的解构赋值详解
Apr 13 Javascript
详解JS实现简单的时分秒倒计时代码
Apr 25 Javascript
p5.js绘制创意自画像
Nov 04 Javascript
Vue中Object.assign清空数据报错的解决方案
Mar 03 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
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
PHP 中使用ajax时一些常见错误总结整理
2017/02/27 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
JS+CSS实现的经典圆角下拉菜单效果代码
2015/10/21 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
vue路由懒加载的实现方法
2018/03/12 Javascript
react 父子组件之间通讯props
2018/09/08 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
vue实现div单选多选功能
2020/07/16 Javascript
javascript实现时钟动画
2020/12/03 Javascript
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
全网首秀之Pycharm十大实用技巧(推荐)
2020/04/27 Python
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
4s店机修工岗位职责
2013/12/20 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
环保标语口号
2014/06/13 职场文书
简短清晨问候语
2015/11/10 职场文书