JS this指针的理解

this是javascript的一个关键字,也是比较容易令人迷糊的一个概念

this的本质:当前对象的所有者

示例1

var x = 1;
function test() {
    alert(this.x);
}
test();

在之前的“JS执行顺序”文章中讲过,这个test函数会被先编译为一个全局变量,如

var test = function test() {
    alert(this.x);
};

所以这个this所属对象为全局对象,this.x 就是全局变量 x,alert弹出值为'1'

示例2

var x = 2;
function test() {
    alert(this.x);
}
var obj = {};
obj.x = 1;
obj.func = test;
o.func();

这个输出结果为'1',因为这里test被赋给了对象obj,this的所有者就是obj,this.x 也就是 obj.x

示例3

下面这个例子比较有迷惑性,是一个比较容易出错的情况

function test() {
    alert(this.title);
}
<input type="button" value="test" onclick="test()" title="i am button"/>

输出的结果:undefined

其实onclick="test()",相当于

function onclick(event){
test();
}

是一个全局的function,上面的 test方法也是全局的function,而全局变量中并没有定义 title,所以结果为 undefined

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2015-10-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件开发 -- 分享 互助 成长

C++ STL之deque的基本操作

前两篇博文中已经介绍了vector和list的两种容器,我们发现他们各有各的优缺点,vector在内存中连续存储,支持随机访问,但是查找和删除的效率比较低,而l...

24450
来自专栏闻道于事

Java多线程详解

每个运行的程序就是一个进程,当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个进程。

14230
来自专栏北京马哥教育

五个python常用运维脚本面试题实例

一、用Python写一个列举当前目录以及所有子目录下的文件,并打印出绝对路径 #!/usr/bin/env python import os for root,...

59070
来自专栏Python研发

大话设计模式之简单工厂模式

  最近朋友推荐了一本书《大话设计模式》,此书刚刚到,博主也还没开始看,希望以博文的方式与大家一起分享,一起学习.

13030
来自专栏java一日一条

JVM运行时数据区域及GC

方法区 (Method Area or Permanent Generation):

11020
来自专栏python3

python之linux下pdb试调

break : 添加断点,比如在第5行添加断点break 5,在getlist函数添加断点break

9420
来自专栏IMWeb前端团队

简单而强大的swig.js

本文作者:IMWeb json 原文出处:IMWeb社区 未经同意,禁止转载 swig的简单介绍 swig是JS模板引擎,它有如下特点: 根据路劲渲染...

28690
来自专栏生信小驿站

R语言基础操作①基础指令

q()——退出R程序 tab——自动补全 ctrl+L——清空console ESC——中断当前计算

39920
来自专栏ShaoYL

预处理指令(文件的包含)

33390
来自专栏javathings

volatile 解决了什么问题?

volatile 关键字是最常问到的问题,关于这个关键字的作用解释,网上的文章已经多如牛毛了。

33830

扫码关注云+社区

领取腾讯云代金券