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 ...
随机推荐
- jQuery的简单入门练习
<html> <head> <meta charset="utf-8"> <title>jQuery的练习</title> ...
- OC中如何把数组中字典的数据转换成URL?
在使用objective-c语言开发iOS应用中,会向服务器通过URL请求一些数据,因此对URL的拼接肯定少不了.而在iOS中,我们一般是通过将字典中的数据拼接成我们要请求的URL字符串,那这个是怎么 ...
- 查看LINUX进程内存占用情况(转)
可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令: (1)top top命令是Linux下常用的性能分析 ...
- Delphi 如何让程序获取权限结束指定进程?
比如说让程序结束进程中360sd.exe 获取权限,否则会拒绝访问, 要怎么写? 补充: 这段代码中……点击按钮后结束不了360进程! unit Unit1;interfaceusesWindow ...
- Disable multi finger touch in my app
http://stackoverflow.com/questions/12777435/disable-multi-finger-touch-in-my-app android:splitMotion ...
- Python 之range 和 xrange
我目前使用的版本是2.7.6 >>> help (range)Help on built-in function range in module __builtin__: range ...
- IOS开发之不同版本适配问题2(#ifdef __IPHONE_7_0)
继续说说ios不同版本之间的适配 先说一个东西:在xcode当中有一个东西叫targets,苹果的官方文档是这样说的: A target specifies a product to build an ...
- 【实用技巧】取消Win7开机账户的手动选择
因为前面碰到的一些事情,稍有感慨. 关于win7的一些小技巧都不是什么很有技术含量东西,或者说很浅显.我说一个技巧,也许很多人都知道,也许也早有人说过.但我想说的是我不是在炫耀什么,我只是想分享一些我 ...
- 机器学习基石--学习笔记01--linear hard SVM
背景 支持向量机(SVM)背后的数学知识比较复杂,之前尝试过在网上搜索一些资料自学,但是效果不佳.所以,在我的数据挖掘工具箱中,一直不会使用SVM这个利器.最近,台大林轩田老师在Coursera上的机 ...
- 解决vbox下安装centos不能上网问题
由于工作需要用到Centos做服务器,使用VBOX安装Centos7系统后发现不能上网,记录解决方法,以便下次使用.找到/etc/sysconfig/network-scripts/ifcfg-enp ...