Javascript this 关键字
Javascript 的 this
关键字总是指向当前被执行函数的所有者。
换句话说,如果当前函数可以视为某个对象的一个方法,那么 this
就指向该对象。
例如有这么一个函数 doSomething()
:
function doSomething(){
this.style.color = '#cc0000';
}
如果 doSomething()
定义全局上下文中,那么 this
指向的就是全局变量 window
。但是 window
没有 style
属性,所以在全局环境中执行该函数将提示错误。因此使用 this
关键字需要特别注意函数的所有者。
复制
在 JS 的事件处理中,我们要实现 this
关键字正确指向某个页面元素,则必须将函数复制该元素的某个属性上,例如 onclick
属性。
element.onclick = doSomething;
以上代码演示了函数被完整地复制到了 onclick
属性,因此当执行 doSomething
函数时,对应的 element 元素的颜色将发生改变。
引用
当你使用内联事件注册时。
<element onclick="doSomething()">
你没有复制函数,你只是引用了该函数,它们之间的区别十分重要,因为 onclick
属性没有包含任何真正的函数代码,而仅仅是一次函数调用。
它的意思是跳转到 doSomething()
函数并执行它,因此当代码执行到 doSomething()
时,this
其实是指向 window
这个全局对象。
区别
如果你想在事件处理中正确使用 this
访问 HTML 元素,你必须保证 this 关键字真正写入到了 onclick
属性。如果 this
关键字正确写入到了 onclick
属性,那么你输入:
element.onclick = doSomething;
alert(element.onclick)
你会得到
function doSomething() {
this.style.color = '#cc0000';
}
正如你所见,this
关键字在 onclick
方法中,因此它会指向 HTML 元素。
如果你输入的是
<element onclick="doSomething()">
alert(element.onclick)
你会得到
function onclick(){
doSomething()
}
这仅仅是引用到函数 doSomething()
,this
关键字并没有出现在 onclick
方法中,因此它不会引用到 HTML 元素。
示例 - 复制
以下情况中,this
都被写入到 onclick
方法中:
element.onclick = doSomething
element.addEventListenser('click', doSomething, false)
element.onclick = function() {this.style.color = '#cc0000'; }
<element onclick="this.style.color = '#cc0000';">
示例 - 引用
以下情况 this
引用到 window
:
element.onclick = function () {doSomething() }
element.attachEvent("onclick", doSomething)
<element onclick="doSomething()">
混合
如果想在内联事件注册中使用 this
,可以按以下方法实现:
<element onclick="doSomething(this)">
function doSomething(obj) {
obj.style.color = '#cc0000';
}
Ref:
Javascript this 关键字的更多相关文章
- javascript this关键字指向详解
在之前写代码的经历中,常常试过写着写着this就莫名其妙的不知道指向到哪里去了.今天看了曾探的javascript设计模式,里面特别谈到了this在不同情况下指代的对象,非常有意思. this指代的情 ...
- JavaScript 保留关键字
JavaScript 保留关键字 在 JavaScript 中,一些标识符是保留关键字,不能用作变量名或函数名. JavaScript 标准 所有的现代浏览器完全支持 ECMAScript 3(ES3 ...
- JavaScript保留关键字(全)
JavaScript 标准 所有的现代浏览器已经完全支持 ES5(ECMAScript 5). JavaScript 保留关键字(keyword) Javascript 的保留关键字(标识符)不可以用 ...
- JavaScript var关键字、变量的状态、异常处理、命名规范等介绍
本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...
- JavaScript——this关键字
请看下面的代码,最后alert出来的是什么呢? 1 var name = "Bob"; 2 var nameObj ={ 3 name : "Tom", 4 s ...
- javascript保留关键字
1.通用保留关键字 break delete function return typeof case do if switch var catch else in this void continue ...
- JavaScript搜索关键字高亮的实现
高亮功能主要是指对页面中指定区域的指定文字进行高亮显示,也就是背景着色.一般在搜索结果页面会经常用到这个功能. 下面就为大家提供一种解决方案,用javascript实现. 首先在<head> ...
- 跟着9张思维导图学习Javascript js 关键字和保留字 css3中的BFC,IFC,GFC和FFC
跟着9张思维导图学习Javascript 学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将 po 出我收集的 9 张 javascript 相关的思维导图(非原创). 思维导图小ti ...
- javaScript的关键字与保留字
JavaScript 关键字: break case catch continue default delete do else finally for function if in instance ...
随机推荐
- 为什么说外卖O2O行业的未来在于尖端技术?
7月13日,百度公司董事长兼CEO李彦宏在发布会上谈及百度外卖时表示,百度外卖里有非常多的人工智能技术的应用,比如同样的商家订单,先配送后配送,时间路线规划等等,都有人工智能的技术,涉及机器学习的问题 ...
- oracle sqlserver mysql数据库分页
1.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM tabl ...
- AngularJS(一)
什么是AngularJS[双向数据绑定:从界面的操作能实时反映到数据,数据的变更能实时展现到界面.]?1.AngularJS 使得开发现代的单一页面应用程序(SPAs:Single Page Appl ...
- js中的eval()和catch()
定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法 eval(string) 参数 描述 string 必需.要计算的字符串,其中含有要计算的 Java ...
- 【CUDA学习】全局存储器
全局存储器,即普通的显存,整个网格中的任意线程都能读写全局存储器的任意位置. 存取延时为400-600 clock cycles 非常容易成为性能瓶颈. 访问显存时,读取和存储必须对齐,宽度为4By ...
- EWM ODO清理功能
ERP OBD下传到EWM会自动产生拣货任务(通常做法),但如果EWM因库存不足或其它原因无法拣货时一般要差异确认,对ODO行项目进行0确认.但问题是零确认后EWM标准流程是无法回传ERP的. ERP ...
- Python 内置彩蛋
The Zen of Python, by Tim Peters Beautiful is better than ugly.Explicit is better than implicit.Simp ...
- 推荐算法——距离算法
本文内容 用户评分表 曼哈顿(Manhattan)距离 欧式(Euclidean)距离 余弦相似度(cos simliarity) 推荐算法以及数据挖掘算法,计算"距离"是必须的~ ...
- asp.net 的page 基类页面 做一些判断 可以定义一个基类页面 继承Page类 然后重写OnPreLoad事件
public class BasePage:Page protected override void OnPreLoad(EventArgs e){ base.OnPreLoad(e); ...
- iOS-Xcode上传后iTunes Connect构建版本不显示
在升级到Xcode8版本以后大多数人会碰到这个问题-开开心心开发好一款app以后上传到iTunes后台提交审核,然而iTunes Connect后台活动栏里没有出现我们上传的app,确切的说是显示一会 ...