this的指向
在JS中,有三种需要注意的this:寻常的this/事件的this/ajax请求的this。
寻常的this
这种this的判断很简单,this是指向执行函数的对象。下面是事例说明:
var name = "window";
var test1 = function() {
    this.name = "test1";      //此处真相:window.name = "test1"
    console.log(this.name);
}
test1(); //结果为:test1
var test2 = {
    getName : function() {
        console.log(this.name);
    }
}
test2.getName();  //结果为:undefined
var test3 = function() {
    this.name = "test3";
}
test3.prototype.getName = function() {
    console.log(this.name);
}
var test = new test3();      //new的原理就不说了,可以看我以前写的博文"new操作符做了什么"
console.log(test.getName);   //结果为:test3
从上面的事例可以得出两个结论:
- 寻常情况下,判断this不用多想其他,只需关注执行此函数的对象就行。
//说白了,"前缀"."方法名",this-->"前缀" 
 test1() //写完整是window.test1(),this-->window
 test2.getName() //this-->test2
 test2.test3.test4.getName() //this-->test2.test3.test4
- test2.getName()的结果是undefined,可以得出,this是不存在回溯,当前的this的某个属性没有,那就是没有,存在__proto__属性才可以回溯
事件的this
事件的this是触发这个时间的DOM对象。下面是事例说明:
<div>
<input type="button" id="button" value="按钮" />
</div>
<script type="text/javascript">
var btn = document.getElementById("button"); btn.onclick = function(e) { //this-->DOM节点input
console.log(this);
};
</script>
ajax的this
ajax的this是XMLHttpRequest对象,创建ajax的函数如下:
function createXHR(){
    if (typeof XMLHttpRequest != "undefined"){
        return new XMLHttpRequest();
    } else if (typeof ActiveXObject != "undefined"){
        if (typeof arguments.callee.activeXString != "string"){
            var versions = [ "MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"], i, len;
            for (i=0,len=versions.length; i < len; i++){
                try {
                    new ActiveXObject(versions[i]);
                    arguments.callee.activeXString = versions[i];
                    break;
                } catch (ex){
                //跳过
                }
            }
        }
        return new ActiveXObject(arguments.callee.activeXString);
    } else {
        throw new Error("No XHR object available.");
    }
}
var XHR = createXHR(); //XHR就是Ajax对象
在根本上,this的指向都是可以通过判定寻常this的方法来判定,只是在使用jQuery等模版语言的时候,容易被蒙蔽了眼睛
this的指向的更多相关文章
- C语言中 指向函数的指针 简介
		引子:在学习CPrimerPlus的第十四章的14.13节中,遇到了如下三行文字,是有关指向函数的指针的,把我搞晕了. char * fump(); //返回指向char的指针的函数 char (* ... 
- JS this指向
		正常模式 在正常模式下独立函数的的 this 指向 undefined 或 window. <script type="text/javascript"> functi ... 
- java多态性,父类引用指向子类对象
		父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal animal = new C ... 
- 【javascript 技巧】谈谈setTimeout的作用域以及this的指向问题
		setTimeout的用法详见:http://www.w3school.com.cn/htmldom/met_win_settimeout.asp 是的,setTimeout的常见用法是让某个方法延迟 ... 
- what's this? 浅谈js中this的指向问题
		刚刚学习js的朋友可能和我一样,看到代码中的this总是一脸懵逼,不知道this到底指向谁.经过一段时间的了解,我想跟大家分享下自己的理解. 何时出现this 函数在调用的时候,会自动获得两个特殊变量 ... 
- EC笔记,第二部分:10.让=返回指向*this的引用
		Effective C++ 学习笔记 10 让=返回指向*this的引用 Table of Contents 1. 原因 2. 建议:在没有充分理由标新立异前,最好的做法是遵从传统. –by SkyF ... 
- JavaScript中this指针指向的彻底理解
		this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象 这一点与函数中自由变量Action-varibal不同 var ... 
- JavaScript中this指向的简单理解
		首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ... 
- 12-返回指针的函数&&指向函数的指针
		前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针 一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回 ... 
- 彻底理解js中this的指向,不必硬背。
		首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ... 
随机推荐
- NOIP 2005 青蛙过河
			做题记录:2016-08-10 21:58:09 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都 ... 
- 【BZOJ】2216: [Poi2011]Lightning Conductor
			题意 给一个长度为\(n\)的序列\(a_i\),对于每个\(1 \le i \le n\),找到最小的非负整数\(p\)满足 对于任意的\(j\), \(a_j \le a_i + p - \sqr ... 
- 【BZOJ3224】Tyvj 1728 普通平衡树 Splay
			Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数 ... 
- MongoDB的数据库基本操作(二)
			创建数据库 >use mydb switched to db mydb 查看所有的数据表 >show collections system.indexes 创建数据表 >db.c ... 
- win7/IE8无法加载QCbin的插件
			pian A: 1.控制面板->系统和安全->更改用户账户控制设置->安全等级调至最低->关机重启 2.打开IE浏览器->工具->Internet选项->高级 ... 
- Aidl的使用步骤
			先说说Aidl传递参数类型 1.基本数据类型(除short类型) 2.String.charSequence 3.List,map 4.parcelable 第1步:定义一个*.aidl文件,ecli ... 
- Js中找任意对象的原型方法及改造原型
			Java中有运行时类型识别,js可以很方便的模仿这个特性,因为所有js对象都有一个属性constructor(构造器),表示这个对象的构造方法,原型与构造方法同名,所以可以通过这儿知道任意对象的原型名 ... 
- IOS彩票第二天设置界面(2)
			*********代码的抽取ILBaseTableViewController.h #import <UIKit/UIKit.h> @interface ILBaseTableViewCo ... 
- JavaBean组件的基本使用-语法
			<jsp:useBean id="实例化对象名称" scope="保存范围" class="包.类名"> </jsp:us ... 
- Jquery--防止冒泡
			e.stopPropagation();//阻止冒泡 
