JavaScript中this的9种应用场景及三种复合应用场景


Posted in Javascript onSeptember 12, 2015

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

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

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

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

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

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

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

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

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

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

【场景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','20');
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();

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

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

【复合场景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 = 2;
var a = {
 name: 3,
 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();
  }, 1000);
 }
}; 
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);
   })();
  }, 1000);
 }
}; 
nameObj.waitShowName();// 'Bob'[形成匿名函数,this指向全局变量]

本文给大家介绍了this中的9种应用场景,希望对大家有所帮助,本站每天都有新的内容更新,请广大网友持续关注本站,谢谢。

Javascript 相关文章推荐
有关javascript的性能优化 (repaint和reflow)
Apr 12 Javascript
Javascript this 关键字 详解
Oct 22 Javascript
jquery实现经典的淡入淡出选项卡效果代码
Sep 22 Javascript
JS实现图片高亮展示效果实例
Nov 24 Javascript
Node.js 应用跑得更快 10 个技巧
Apr 03 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
Mar 23 jQuery
JS库之Highlight.js的用法详解
Sep 13 Javascript
用JavaScript做简易的购物车的代码示例
Oct 20 Javascript
Javascript中prototype与__proto__的关系详解
Mar 11 Javascript
Javascript Dom元素获取和添加详解
Sep 24 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
Mar 10 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
Oct 23 Javascript
javascript判断网页是关闭还是刷新
Sep 12 #Javascript
js查看一个函数的执行时间实例代码
Sep 12 #Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
Sep 12 #Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
Sep 11 #Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
Sep 11 #Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
Sep 11 #Javascript
js实现的后台左侧管理菜单代码
Sep 11 #Javascript
You might like
getJSON跨域SyntaxError问题分析
2014/08/07 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
javascript parseInt 大改造
2009/09/27 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
点击页面其它地方隐藏该div的两种思路
2013/11/18 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
理解javascript模块化
2016/03/28 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
ReactNative页面跳转Navigator实现的示例代码
2017/08/02 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
HTML元素拖拽功能实现的完整实例
2020/12/04 Javascript
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
Numpy掩码式数组详解
2018/04/17 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
python pandas读取csv后,获取列标签的方法
2018/11/12 Python
python中类的属性和方法介绍
2018/11/27 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
海外淘书首选:AbeBooks
2017/07/31 全球购物
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
投标承诺书怎么写
2014/05/24 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
医院合作意向书范本
2015/05/08 职场文书
法人代表证明书范本
2015/06/18 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
golang 实现时间戳和时间的转化
2021/05/07 Golang
HTML常用标签超详细整理
2022/03/19 HTML / CSS
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电