【场景1】全局环境中的this指向全局对象

this.a = ;
alert(a);//
b = ;
alert(this.b);//
var c = ;

【场景2】对象内部函数的this指向调用函数的当前对象

var a = ;
var bar = {
a: ,
test: function(){
alert(this.a);
}
}
bar.test();//

【场景3】全局环境函数的this指向全局对象

var a = ;
function foo(){
alert(this.a);
}
foo();//

【场景4】匿名函数中的this指向全局对象

var a = ;
var foo = {
a: ,
fn: (function(){
alert(this.a);
})()
}
foo.fn//

【场景5】setInterval和setTimeout定时器中的this指向全局对象

var a = ;
var oTimer1 = setInterval(function(){
var a = ;
alert(this.a);//
clearInterval(oTimer1);
},);

【场景6】eval中的this指向调用上下文中的this

(function(){
eval("alert(this)");//[object Window]
})();
function Foo(){
this.bar = function(){
eval("alert(this)");//[object Object]
}
}
var foo = new Foo();
foo.bar();

【场景7】构造函数中的this指向构造出的新对象

function Person(name,age){
this.name = name;
this.age = age;
this.sayName = function(){
alert(this.name);
}
}
var p1 = new Person('lily','');
p1.sayName();//'lily'

【场景8】new Function中的this指向绑定或调用对象

(function(){
var f = new Function("alert(this)");
f();//[object Window]
})();
function Foo(){
this.bar = function(){
var f = new Function("alert(this)");
f();//[object Window]
}
}
var foo = new Foo();
foo.bar();
以上指向全局。
var obj = {
name : "江太公",
sex : "男",
action : new Function("console.log(this)")
} obj.action();
-- ::45.684 VM4742:
Object {name: "江太公", sex: "男"}
以上指向调用对象。

【场景9】apply和call中的this指向参数中的对象

var a = ;
var foo = {
a: ,
fn: function(){
alert(this.a);
}
};
var bar ={
a:
}
foo.fn.apply();//10(若参数为空,默认指向全局对象)
foo.fn.apply(foo);//
foo.fn.apply(bar);//

【复合场景1】

var someone = {
name: "Bob",
showName: function(){
alert(this.name);
}
};
var other = {
name: "Tom",
showName: someone.showName
}
other.showName();  //Tom //以上函数相当于 var other = {
name: "Tom",
showName: function(){
alert(this.name);
}
}
other.showName();  //Tom

【复合场景2】

var name = ;
var a = {
name: ,
fn: (function(){
alert(this.name);
})(),
fn1:function(){
alert(this.name);
}
}
a.fn;//2[匿名函数中的this指向全局对象]
a.fn1();//3[对象内部函数的this指向调用函数的当前对象]

【复合场景3】

var name = "Bob";
var nameObj ={
name : "Tom",
showName : function(){
alert(this.name);
},
waitShowName : function(){
var that = this;
setTimeout(function(){
that.showName();
}, );
}
};
nameObj.waitShowName();//"Tom"[that=this改变this的指向,使this从指向全局变量变化到指向nameObj] var name = "Bob";
var nameObj ={
name : "Tom",
showName : function(){
alert(this.name);
},
waitShowName : function(){
var that = this;//that指向nameObj
setTimeout(function(){
(function(){
alert(this.name);
})();
}, );
}
};
nameObj.waitShowName();// 'Bob'[形成匿名函数,this指向全局变量]

补充:

DOM事件处理函数中的 this

当函数被用作事件处理函数时,它的this指向触发事件的元素(一些浏览器在动态添加监听器时不遵守这个约定,除非使用addEventListener 这句不太确定翻译的是否正确)。

// 被调用时,将关联的元素变成蓝色
function bluify(e){
console.log(this === e.currentTarget); // 总是 true // 当 currentTarget 和 target 是同一个对象是为 true
console.log(this === e.target);
this.style.backgroundColor = '#A5D9F3';
} // 获取文档中的所有元素的列表
var elements = document.getElementsByTagName('*'); // 将bluify作为元素的点击监听函数,当元素被点击时,就会变成蓝色
for(var i=0 ; i<elements.length ; i++){
elements[i].addEventListener('click', bluify, false);
}

内联事件处理函数中的 this

当代码被内联处理函数调用时,它的this指向监听器所在的DOM元素:

<button onclick="alert(this.tagName.toLowerCase());">
  Show this
</button>

上面的alert会显示button。注意只有外层代码中的this是这样设置的:

<button onclick="alert((function(){return this})());">
Show inner this
</button>

在这种情况下,没有设置内部函数的 this,所以它指向 global/window 对象(即非严格模式下调用的函数未设置 this 时指向的默认对象)。

 
Regex
Hide network messages
  • All
 
  • Errors
  • Warnings
  • Info
  • Logs
  • Debug
  • Handled
 
var obj = { name : "江太公", sex : "男", action : new Function("console.log(this)") } obj.action();
2017-01-20 11:07:45.684 VM4742:2

  1. Object {name: "江太公", sex: "男"}

this的九种常用场景(转子jb51.net)的更多相关文章

  1. Rational Rose 画九种常用架构图

    UML建模详解(3)—使用Rational Rose 画九种常用架构图   UML是一种建模语言,是系统建模的标准.我们之所以建模是因为大规模的系统设计时相当复杂的,当系统比较复杂时就会涉及到以下这几 ...

  2. 【Algorithm】九种常用排序的性能分析

    最近间间断断的将9种排序算法用C实现,并且将其以博客笔记的形式记录下来,其中各个排序算法的描述部分特别参考了CSDN上太阳落雨的博客!现在就该来综合的分析这九种排序,让我们先来看看其算法复杂度和稳定性 ...

  3. rbac-基于角色的权限控制系统(8种常用场景再现)

    首先要抛出的问题是在代码世界里什么是权限? url就代表权限 如何实现权限控制? 下面详细介绍控制流程 1.1简单权限控制--表结构 简单权限控制,三个model,五张表 权限表permission ...

  4. Git——常用场景解析

    总结:本篇文章从初识GitHub.Git,实践GitHub的五种常用场景,分别是:git for windows安装,git配置,克隆远程代码到本地,上传本地代码到远程以及Git的常用指令.相信Jam ...

  5. 2 万字 + 20张图| 细说 Redis 九种数据类型和应用场景

    作者:小林coding 计算机八股文网(操作系统.计算机网络.计算机组成.MySQL.Redis):https://xiaolincoding.com 大家好,我是小林. 我们都知道 Redis 提供 ...

  6. python中常用的九种数据预处理方法分享

    Spyder   Ctrl + 4/5: 块注释/块反注释 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(St ...

  7. python中常用的九种预处理方法

    本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(Standardization or Mean Removal ...

  8. Android UI开发第二十九篇——Android中五种常用的menu(菜单)

    Android Menu在手机的应用中起着导航的作用,作者总结了5种常用的Menu. 1.左右推出的Menu 前段时间比较流行,我最早是在海豚浏览器中看到的,当时耳目一新.最早使用左右推出菜单的,听说 ...

  9. UML总结4---UML九种图关系说明

    转自:http://blog.csdn.NET/chenyujing1234/article/details/8173519 UML中包括九种图:用例图.类图.对象图.状态图.时序图.协作图.活动图. ...

随机推荐

  1. Sqoop使用笔记(转载)

    Sqoop是Apache顶级项目,主要用来在Hadoop和关系数据库中传递数据.通过sqoop,可以方便的将数据从关系数据库导入到HDFS,或将数据从HDFS导出到关系数据库. 关于Sqoop 官网S ...

  2. 通过设置窗体的AcceptButton属性,可以设置窗体的“接受”按钮,若此设计,则用户每次按下Enter键都相当于单击该按钮

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  3. [OS] 信号量(Semaphore)

    一个信号量S是一个整型量,除对其初始化外,它只能由两个原子操作P和V来访问.P和V的名称来源于荷兰文proberen(测试)和verhogen(增量),后面亦将P/V操作分别称作wait(), sig ...

  4. SpringBoot JDBC/AOP

    JDBC 工程结构: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmln ...

  5. iOS-系统 图片、视频 管理控制器UIImagePickerController

        UIImagePickerController 是一个管理系统多媒体文件库(相册)中的图片.视频文件的视图控制器,诞生于iOS4之前,虽然功能不是很完善,我们仍可以用这个视图控制器做一些有创造 ...

  6. BZOJ 1821 部落划分(二分+并查集)

    答案是具有单调性的. 因为最近的两个部落的距离为mid,所以要是有两个野人的距离<mid,则他们一定是一个部落的. 用并查集维护各联通块,如果最后的联通块个数>=k,那么mid还可以再小点 ...

  7. 【zoj2314】Reactor Cooling 有上下界可行流

    题目描述 The terrorist group leaded by a well known international terrorist Ben Bladen is buliding a nuc ...

  8. snmpwalk的报文检测

    1.先用nc起一个监听的端口,然后看报文是不是正确的: 注:nc是一个模拟各种网络协议的东西,模拟服务器.客户端等: 2.触发告警,让他发报文: 3.用nc模拟一个服务端,启动一个udp的端口163: ...

  9. IntellIJ IDEA 配置 Maven

    一.配置Maven环境 1.下载apache-maven文件,选择自己需要的版本 2.解压1所下载文件,E:\apache-maven-3.5.4 3.配置Maven环境变量 a. MAVEN_HOM ...

  10. 【BZOJ1941】Hide and Seek(KD-Tree)

    [BZOJ1941]Hide and Seek(KD-Tree) 题面 BZOJ 洛谷 题解 \(KD-Tree\)对于每个点搜一下最近点和最远点就好了 #include<iostream> ...