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 相关文章推荐
firefox中JS读取XML文件
Dec 21 Javascript
基于jQuery实现图片的前进与后退功能
Apr 24 Javascript
window.location.href中url中数据量太大时的解决方法
Dec 23 Javascript
javascript函数中参数传递问题示例探讨
Jul 31 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
Jul 05 Javascript
js操作数组函数实例小结
Dec 10 Javascript
提升jQuery的性能需要做好七件事
Jan 11 Javascript
JS实现获取剪贴板内容的方法
Jun 21 Javascript
浅谈JavaScript中promise的使用
Jan 11 Javascript
浅谈angularjs $http提交数据探索
Jan 20 Javascript
非常实用的vue导航钩子
Mar 20 Javascript
深入浅析Vue.js计算属性和侦听器
May 05 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
用Socket发送电子邮件
2006/10/09 PHP
用PHP将网址字符串转换成超链接(网址或email)
2010/05/25 PHP
$_GET['goods_id']+0 的使用详解
2013/06/06 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
php无限极分类实现方法分析
2019/07/04 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
jQueryUI的Dialog的简单封装
2010/06/07 Javascript
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
使用 JScript 创建 .exe 或 .dll 文件的方法
2011/07/13 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
探究Python多进程编程下线程之间变量的共享问题
2015/05/05 Python
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
Bata印度官网:源自欧洲舒适鞋履品牌
2020/01/30 全球购物
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
Unix里面如何在后台运行程序
2016/10/14 面试题
基层党组织公开承诺书
2014/03/28 职场文书
三月学雷锋月活动总结
2014/04/28 职场文书
领导干部对照检查材料
2014/08/24 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
法人授权委托书范本
2014/09/17 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书