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 相关文章推荐
5秒后跳转效果(setInterval/SetTimeOut)
May 03 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
Aug 19 Javascript
jquery1.10给新增元素绑定事件的方法
Mar 06 Javascript
引用其它js时如何同时处理多个window.onload事件
Sep 02 Javascript
javascript中CheckBox全选终极方案
May 20 Javascript
JS实现的相册图片左右滚动完整实例
Nov 23 Javascript
微信小程序实现图片上传、删除和预览功能的方法
Dec 18 Javascript
VUE 配置vue-devtools调试工具及安装方法
Sep 30 Javascript
微信小程序实现九宫格抽奖
Apr 15 Javascript
vue项目移动端实现ip输入框问题
Mar 19 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
Aug 17 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
Feb 25 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中3种方法删除字符串中间的空格
2014/03/10 PHP
PHP 使用redis简单示例分享
2015/03/05 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
PHP实现腾讯短网址生成api接口实例
2020/12/08 PHP
PHP 裁剪图片
2021/03/09 PHP
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
2015/11/02 Javascript
详解javascript的变量与标识符
2016/01/04 Javascript
基于jquery实现简单的分页控件
2016/03/17 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
基于JavaScript实现右键菜单和拖拽功能
2016/11/28 Javascript
JQuery实现定时刷新功能代码
2017/05/09 jQuery
浅谈Angular4实现热加载开发旅程
2017/09/08 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
深入浅析Vue.js计算属性和侦听器
2018/05/05 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
python中正则表达式的使用详解
2014/10/17 Python
Django中使用group_by的方法
2015/05/26 Python
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
Python PIL库图片灰化处理
2020/04/07 Python
Python中zip函数如何使用
2020/06/04 Python
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
纪检干部个人对照检查材料
2014/09/23 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
感恩教育主题班会
2015/08/12 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书