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 写类方式之六
Jul 05 Javascript
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
Mar 08 Javascript
如何用JavaScript定义一个类
Sep 12 Javascript
javascript数据类型示例分享
Jan 19 Javascript
jquery实现页面关键词高亮显示的方法
Mar 12 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
May 27 Javascript
Javascript小技能总结(推荐)
Jun 02 Javascript
网络传输协议(http协议)
Nov 18 Javascript
分析JS中this引发的bug
Dec 12 Javascript
js指定日期增加指定月份的实现方法
Dec 19 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
Apr 04 Javascript
angular6开发steps步骤条组件
Jul 04 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伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
PHP实现简易图形计算器
2020/08/28 PHP
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
JS重要知识点小结
2011/11/06 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
JavaScript函数详解
2015/02/27 Javascript
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
jQuery随机密码生成的方法
2015/03/09 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
React复制到剪贴板的示例代码
2017/08/22 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
Selenium chrome配置代理Python版的方法
2018/11/29 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
python 表格打印代码实例解析
2019/10/12 Python
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
Ajax请求总共有多少种Callback
2016/07/17 面试题
大专生自我鉴定范文
2013/10/01 职场文书
文秘自荐信
2013/10/20 职场文书
关于工资低的辞职信
2014/01/14 职场文书
2016年校园重阳节广播稿
2015/12/18 职场文书
禁毒心得体会范文
2016/01/15 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python
MySQL中distinct与group by之间的性能进行比较
2021/05/26 MySQL
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA