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 object array方法使用详解
Dec 03 Javascript
JavaScript建立一个语法高亮输入框实现思路
Feb 26 Javascript
自动最大化窗口的Javascript代码
May 22 Javascript
JS实现字体选色板实例代码
Nov 20 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
Aug 24 Javascript
js实现图片从左往右渐变切换效果的方法
Feb 06 Javascript
jquery代码实现多选、不同分享功能
Jul 31 Javascript
JavaScript知识点整理
Dec 09 Javascript
JS实现页面载入时随机显示图片效果
Sep 07 Javascript
bootstrap基础知识学习笔记
Nov 02 Javascript
jQuery使用bind函数实现绑定多个事件的方法
Oct 11 jQuery
JS实现滑动插件
Jan 15 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 中的输出缓冲
2006/12/21 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
js压缩利器
2007/02/20 Javascript
Auntion-TableSort国人写的一个javascript表格排序的东西
2007/11/12 Javascript
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
浅谈JavaScript的内置对象和浏览器对象
2016/06/03 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
2017/07/12 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
ES6中Array.find()和findIndex()函数的用法详解
2017/09/16 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
Python基本语法经典教程
2016/03/11 Python
基于python log取对数详解
2018/06/08 Python
转换科学计数法的数值字符串为decimal类型的方法
2018/07/16 Python
使用 Python 遍历目录树的方法
2020/02/29 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
2020/04/22 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
python如何设置静态变量
2020/09/07 Python
css3 transform属性详解
2014/09/30 HTML / CSS
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
幸福中国演讲稿
2014/09/12 职场文书
陕西导游词
2015/02/04 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
Python中使用ipython的详细教程
2021/06/22 Python
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python