[翻译]PPK 谈 JavaScript 的 this 关键字
原文:JavaScript - The this keyword
在 JavaScript 中 this 是最强的关键字之一。这篇贴文就是要告诉你如何用好 this。
下面先讲如何在event handling
(事件处理)中用它,再接着是讲 this 的其他用法。
所有者(Owner)
先来看看函数 doSomething() 里的 this 究竟指向(refer to)了什么?
function doSomething() {
this.style.color = '#cc0000';
}
JavaScript的 this 总是指向正执行的函数的所有者。或者是说,它是指向函数这个对象的一种手法。
在页面中定义了
doSomething() 函数时,它的所有者是页面。确切的说是指 JavaScript 的 window 对象(全局对象)。
而
onclick 属性归属 HTML 元素所有。
这种归属谁所有的权利是 JavaScript 的 OO(面向对象)特性的结果。在 把对象作关联数组
页面中有更多信息。
------------ window --------------------------------------
| / \ |
| | |
| this |
| ---------------- | |
| | HTML 元素 | <-- this ----------------- |
| ---------------- | | doSomething() | |
| | | ----------------- |
| -------------------- |
| | onclick 属性 | |
| -------------------- |
| |
----------------------------------------------------------
这里在 doSomething() 执行时,关键字 this 指向 window(窗口) ,该函数将会改动 window 的 style.color。
而 window 没有 style 这个对象,所以该函数会引发 JavaScript 的错误。
拷贝(copying)
因此,想要用好 this 就请继续往下看。像前面的例子在函数中使用的这种情况,this 指向它归属谁所有的那个 HTML 元素。
也就是说,有个函数拷贝指向 onclick 属性。 我们来看看在传统事件注册
中的情况。
element.onclick = doSomething;
函数是它整个的拷贝,指向 onclick 属性(现在变成了方法)。因此,事件处理被执行时,this 指向 HTML 元素并将改动 color。
----------
相关文档:
<script>
var flags ;
if(window.XMLHttpRequest) {
XMLHttpReq = new XMLHttpRequest(); //firefox下执行此语句
}
else if(window.ActiveXObject) {
try{
XMLHttpReq = new Acti ......
下面都是个人理解以及查找的网上的资料,如有不对的地方请指正
This
this 始终指向调用它的对象 ,都没有对象调用时就指向window
另外就是this一般都是在function中,当不在function中的时候 一定是指向window的.
var a ='a';
alert(this.a); //出来的是a
alert(this.b); //undefined 因为还没定义 ......
var myDate = new Date();
myDate.getYear(); //获取当前年份(2位)
myDate.getFullYear(); //获取完整的年份(4位,1970-????)
myDate.getMonth(); //获取当前月份(0-11,0代表1 ......
在页面中我们最常见的页面元素就是input了,但是我们如何用JavaScript得到网页input中输入的value值呢,其实很简单,方法也不止一种,据我总结比较常用的就是下面的两种方法,闲话不多说了,下面那就来看看我说的方法吧:
方法一、
function print(){
var a=myform. ......
面向对象已不再是指封装、继承、抽象等设计方法,目前已经涉及到面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计(OOD,Object Oriented Design)及面向对象的编程实现(OOP,Object Oriented Programming)。本片文章主要讨论的是如何实现Javascript的面向对象设计。
Javascript是脚本语言,是基于对象 ......