This的指向大致能够分为下面四类。我们分别举例说明

1. 作为对象的方法调用时。this指向该对象

var obj={

    a:1,

    getA:function(){

       console.log( this==obj); //输出true

       console.log(this.a);    //输出1

    }

}

obj.getA();

2. 作为普通函数调用时,this总是指向全局对象,比方说在浏览器中,这个全局对象是window。

window.name="windowname";

var getName=function(){

return this.name;

}

console.log(getName());  //输出windwoname

或者

window.name='windowname2';

var myObject={

name:'yourName',

getName:function(){

return this.name;

}

}

var getName=myObject.getName;

console.log(getName());    //windowname

console.log(myObject.getName());//yourName

3. 作为构造器调用

通常情况下,构造器里的this就指向返回的这个对象。比如:

var myClass=function(){

this.name='yourName';

}

var obj=new myClass();

console.log(obj.name);  //输出yourName

可是当new调用构造器时。构造器显示的返回了一个object类型的对象。那么此次运算的终于结果会返回这个对象,不是我们之前期待的this。

假设返回的不是对象是别的比方说string类型的数据,就还是指向原来的this

var myClass=function(){

this.name='yourName';

return  ’returnName’ ;

}

var obj=new myClass();

console.log(obj.name);  //输出'yourName'

4. Function.prototype.call 或 Function.prototype.apply调用能够动态的改变传入的this的值

var obj1={

name:'name1',

getName:function(){

return this.name;

}

}

var obj2={

name:'name2'

}

console.log(obj1.getName());  //输出name1

console.log(obj1.getName().call(obj2)); /输出name2

至此 第一篇博客写完了。 本文中,我们讲了对thiskeyword做了一些简单的分析。也參考了一些书。在此。对他们表示感谢,假设可以帮助到你。我感到万分荣幸。

让大家见笑了

浅谈javascript的this指向的更多相关文章

  1. 浅谈JavaScript中的闭包

    浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...

  2. 浅谈javascript的原型及原型链

    浅谈javascript的原型及原型链 这里,我们列出原型的几个概念,如下: prototype属性 [[prototype]] __proto__ prototype属性 只要创建了一个函数,就会为 ...

  3. 浅谈javascript函数节流

    浅谈javascript函数节流 什么是函数节流? 函数节流简单的来说就是不想让该函数在很短的时间内连续被调用,比如我们最常见的是窗口缩放的时候,经常会执行一些其他的操作函数,比如发一个ajax请求等 ...

  4. 浅谈JavaScript浮点数及其运算

    原文:浅谈JavaScript浮点数及其运算     JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的.浮点数的精度问题 ...

  5. 浅谈 JavaScript 编程语言的编码规范

    对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编 ...

  6. 浅谈JavaScript中的null和undefined

    浅谈JavaScript中的null和undefined null null是JavaScript中的关键字,表示一个特殊值,常用来描述"空值". 对null进行typeof类型运 ...

  7. 浅谈JavaScript中的正则表达式(适用初学者观看)

    浅谈JavaScript中的正则表达式 1.什么是正则表达式(RegExp)? 官方定义: 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去 ...

  8. [转载]浅谈JavaScript函数重载

     原文地址:浅谈JavaScript函数重载 作者:ChessZhang 上个星期四下午,接到了网易的视频面试(前端实习生第二轮技术面试).面了一个多小时,自我感觉面试得很糟糕的,因为问到的很多问题都 ...

  9. 浅谈JavaScript中的内存管理

    一门语言的内存存储方式是我们学习他必须要了解的,接下来让我浅谈一下自己对他的认识. 首先说,JavaScript中的变量包含两种两种类型: 1)值类型或基本类型:undefined.null.numb ...

随机推荐

  1. mac下更新自带的PHP版本到5.6或7.0

    下载和安装PHP 5.6 打开终端并且运行如下命令: curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6 然后,PHP 5.6的版本会被安装 ...

  2. Python+C混编

    Python最慢!C最快!Python+C混编?结果可想而知! 樱桃种子 百家号04-1712:11 共享库 使用C语言编译产生共享库,然后python使用ctype库里的cdll来打开共享库. 举例 ...

  3. 全面了解linux服务器

    一.查看linux服务器CPU详细情况 判断linux服务器CPU情况的依据如下 具有相同core id的CPU是同一个core的超线程 具有相同physical id的CPU是同一个CPU封装的线程 ...

  4. 一起來玩鳥 Starling Framework 簡介

    開場 Starling Framework是一套Flash 2D遊戲開發"工具",是使用Flash最新的Stage3D API建構出來的一套Framework.最大優點在於使用GP ...

  5. How Tomcat Works 读书笔记 八 加载器 上

    Java的类加载器 具体资料见 http://blog.csdn.net/dlf123321/article/details/39957175 http://blog.csdn.net/dlf1233 ...

  6. Druid对比Impala/Shark

    Druid 和 Impala Shark 的对比取决于产品要求, 取决于系统是设计成做什么的 Druid 被设计成 一直在线, 高可用性    实时插入数据    分片分块形式的任意查询据我所知 Im ...

  7. 【RabbitMQ 参考资料】

    RabbitMQ从入门到精通:http://blog.csdn.net/column/details/rabbitmq.html RabbitMQ消息队列(一): Detailed Introduct ...

  8. Spark(十) -- Spark Streaming API编程

    本文测试的Spark版本是1.3.1 Spark Streaming编程模型: 第一步: 需要一个StreamingContext对象,该对象是Spark Streaming操作的入口 ,而构建一个S ...

  9. PNP管理器简析--基于ReactOS0.33

    CSDN上转悠了一圈发现关于PNP管理的文章不多.那就由我献个丑,记录自己对PNP管理器的看法. pnp管理器被描写叙述为向内核和应用程序提供关于设备拔插的通知,凭感觉,pnp管理器应该是个线程函数等 ...

  10. 【MyBatis学习13】MyBatis中的二级缓存

    1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的.为了更加 ...