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函数般调用正则
Apr 08 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
Mar 01 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
May 06 Javascript
JavaScript的类型、值和变量小结
Jul 09 Javascript
基于JavaScript实现一定时间后去执行一个函数
Dec 14 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
Apr 23 Javascript
JS实现回到页面顶部动画效果的简单实例
May 24 Javascript
深入解析JavaScript中的arguments对象
Jun 12 Javascript
jquery常用的12个小功能
Jul 22 Javascript
BootStrap网页中代码显示用法详解
Oct 21 Javascript
JS实现图片手风琴效果
Apr 17 Javascript
javascript中call,apply,bind的区别详解
Dec 11 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获取url的函数代码
2011/08/02 PHP
XAMPP安装与使用方法详细解析
2013/11/27 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
return false,对阻止事件默认动作的一些测试代码
2010/11/17 Javascript
JavaScript 程序编码规范
2010/11/23 Javascript
Prototype源码浅析 String部分(二)
2012/01/16 Javascript
关于IE BUG与字符串截取substr的解决办法
2013/04/10 Javascript
JavaScript中number转换成string介绍
2014/12/31 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
VueJs与ReactJS和AngularJS的异同点
2016/12/12 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
在Vue项目中引入JQuery-ui插件的讲解
2019/01/27 jQuery
python多线程http下载实现示例
2013/12/30 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
Django框架实现逆向解析url的方法
2018/07/04 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
Python enumerate函数遍历数据对象组合过程解析
2019/12/11 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
GNC健安喜官方海外旗舰店:美国著名保健品牌
2017/01/04 全球购物
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
SQL Server数据库笔试题和答案
2016/02/04 面试题
质检部职责
2013/12/28 职场文书
网络技术专业推荐信
2014/02/20 职场文书
运动会演讲稿
2014/05/07 职场文书
2014标准社保办理委托书
2014/10/06 职场文书
派出所正风肃纪剖析材料
2014/10/10 职场文书
个人借款协议书范本
2014/11/17 职场文书