一段程序让你看懂JS中的this

看下面这段程序

var name = "Bob";
  var nameObj ={
      name : "Tom",
      showName : function(){
          console.log(this.name);
      },
      waitShowName : function(){
          setTimeout(this.showName, 1000);
      }
 };
nameObj.waitShowName();//Bob
nameObj.showName();//Tom

setTimeout函数的默认定义域是全局的,this代指调用他的那个对象,showName()函数是个调用对象为nameObj,故输出了Tom。若要让waitShowName输出Tom,你只需这样做:

    var name = "Bob";
  var nameObj ={
      name : "Tom",
      showName : function(){
          console.log(this.name);
      },  

      waitShowName : function(){
      var that = this; //将this值保存。有些地方也将that写为self。
          setTimeout(function(){
              console.log(that.name);
          }, 1000);
      }
 };  

nameObj.waitShowName();

原文地址:https://www.cnblogs.com/baimeishaoxia/p/12603342.html

时间: 2024-11-07 14:06:55

一段程序让你看懂JS中的this的相关文章

一文看懂js中的clientX,clientY,pageX,pageY,screenX,screenY

一. 客户区坐标位置(clientX,clientY) 鼠标事件都是在浏览器视口中的特定位置发生的.这个位置信息保存在事件对象的clientX和clientY属性中,所有浏览器都支持这两个属性. 我们知道了这个位置信息我们可以做些什么了?举个例子,有时候我们需要获取鼠标在某一个元素中的相对位置,做一些事情,比如自定义拖动条. 案例代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charse

只有程序员可以看懂的笑话 大全集(2)

1.程序猿最烦两件事,第一件事是别人要他给自己的代码写文档,第二件呢?是别人的程序没有留下文档. 2.程序猿的读书历程:x 语言入门 -> x 语言应用实践 -> x 语言高阶编程 -> x 语言的科学与艺术 -> 编程之美 -> 编程之道 -> 编程之禅-> 颈椎病康复指南. 3.还没上大学的时候,高三暑假,跑到家那边的图书城想买传说中的C++的书,然后看到一本C#,我一看,嘿,这个++还写得挺艺术的,重叠起来了,于是把C#买了回来-- 4.问:程序猿最讨厌康熙

只有程序员可以看懂的笑话 大全集(1)

宪法顶个球!中国的法律都是.txt文件,不是.exe文件. 程序员:三年前,当我写下这个的时候,只有上帝和我能够看懂. 现在,只有 上帝能看懂了. 同事说,他在写i++的时候总觉的自己写的是 我艹.........有木有同感??? ? 程序员,年二十有二,始从文,连考而不中. 遂习武,练武场上发一矢,中鼓 吏,逐之出. 改学IT,自撰一函数,用之,堆栈溢出. <桃花庵--程序员版>写字楼里写字间,写字间中程序员: 程序人员写程序, 又将程序换酒钱: 酒醒只在屏前坐,酒醉还来屏下眠: 酒醉酒醒日

一文看懂JS继承

继承是OOP中大家最喜欢谈论的内容之一,一般来说,继承都两种方式:接口继承和实现继承而JavaScript中没有接口继承需要的方法,因此只能依靠实现继承.在讲继承的实现之前,我们首先来回顾一下什么是继承?继承的作用是什么? 它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展.通过继承创建的新类称为"子类"或"派生类".被继承的类称为"基类"."父类"或"超类".在清楚继承的作用之

一篇文章看懂JS执行上下文

 壹 ? 引 我们都知道,JS代码的执行顺序总是与代码先后顺序有所差异,当先抛开异步问题你会发现就算是同步代码,它的执行也与你的预期不一致,比如: function f1() { console.log('听风是风'); }; f1(); //echo function f1() { console.log('echo'); }; f1(); //echo 按照代码书写顺序,应该先输出 听风是风,再输出 echo才对,很遗憾,两次输出均为 echo:如果我们将上述代码中的函数声明改为函数表达式,

转://看懂Oracle中的执行计划

一.什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二.怎样查看Oracle执行计划? 2.1 explain plan for命令查看执行计划 在sql*plus中,执行如下命令: 1)explain plan for select * from XXXX; 2)select * from table(dbms_xplan.display); 2.2 SET AUTOTRACE ON查看执行计划 语法:SET AUTOT[RACE] {OFF |

晨叔技术晨报: 你真的搞懂JS中的“值传递”和“引用传递”吗?

晨叔周刊,每周一话题,技术天天涨. 本周的话题是JS的内存问题(加入本周话题,请点击传送门). 图 话题入口 今天的技术晨报,就来谈谈JS中变量的,值传递和引用传递的问题.现在,对于很多的JSer来讲,基本不关心堆和栈的问题,代码照样666. 但是,现在的前端,不再是传统的JQ时代,而是MVVM,组件化,工程化.前端的承载着复杂业务逻辑.为此,内存问题,成为JSer必须要考虑的问题. 本文从堆栈讲起,让大家理解JS中变量的内存使用以及变动情况 . 一.初步了解堆栈  先初步了解JS中的堆和栈,首

五分钟看懂js关键字this

this是js里面很常用的关键字,而灵活的js也赋予了这个关键字无穷的生命力,相信你也有被它糊弄的时候,我总结了一个6字原则,大部分场合都能清醒分辨this到底指向who,跟大家分享一下,欢迎指正. 谁调用指向谁! 首先介绍一个大boss: window, 他是一个隐形大侠,没有确定的调用者的时候,肯定是它出手, 也就是说,如果一个对象没有显性的调用者时,this指向的就是window. 先看下面的例子: var x = 10; function test(){ console.log("---

三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别

版权声明:本文为sang原创文章,转载请注明出处. 目录(?)[+] 关于inflate参数问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个东东.本篇博客我们不讲源码,只看使用.源码的解读会在下一篇博文中带来. inflate方法从大范围来看,分两种,三个参数的构造方法和两个参数的构造方法.在这两类中又有细分,OK,那我们就把各种情况都来演示一遍. 1.三个参数的in