• 深入认识JavaScript 中的this指针


    深入认识JavaScript 中的this指针
    this指针是面向对象程序设计中的一项重要概念,它表示当前运行的对象。在实现对象
    的方法时,可以使用this指针来获得该对象自身的引用。
    和传统意义的面向对象的语言不同,JavaScript 中的this 指针是一个动态的变量,一个
    方法内的this指针并不是始终指向定义该方法的对象的,在上一节讲函数的apply和call方
    法时已经有过这样的例子。为了方便大家理解,再来看下面的例子:

    <script language="JavaScript" type="text/javascript">
    <!--
    //创建两个空对象
    var obj1=new Object();
    var obj2=new Object();
    //给两个对象都添加属性p,并分别等于1和2
    obj1.p=1;
    obj2.p=2;
    //给obj1添加方法,用于显示p的值
    obj1.getP=function(){
    alert(this.p); //表面上this指针指向的是obj1
    }
    //调用obj1的getP方法
    obj1.getP();
    PDF 文件使用 "pdfFactory" 试用版本创建àwww.fineprint.cn
    13
    //使obj2的getP方法等于obj1的getP方法
    obj2.getP=obj1.getP;
    //调用obj2的getP方法
    obj2.getP();
    //-->
    </script>


    从代码的执行结果看,分别弹出对话框1 和2。由此可见,getP函数仅定义了一次,在
    不同的场合运行,显示了不同的运行结果,这是有this指针的变化所决定的。在obj1 的getP
    方法中,this就指向了obj1 对象,而在obj2 的getP 方法中,this就指向了obj2 对象,并通
    过this指针引用到了两个对象都具有的属性p。
    由此可见,JavaScript 中的this 指针是一个动态变化的变量,它表明了当前运行该函数
    的对象。由this指针的性质,也可以更好的理解JavaScript中对象的本质:一个对象就是由
    一个或多个属性(方法)组成的集合。每个集合元素不是仅能属于一个集合,而是可以动态
    的属于多个集合。这样,一个方法(集合元素)由谁调用,this指针就指向谁。实际上,前
    面介绍的apply方法和call方法都是通过强制改变this指针的值来实现的,使this指针指向
    参数所指定的对象,从而达到将一个对象的方法作为另一个对象的方法运行的效果。
    同时,每个对象集合的元素(即属性或方法)也是一个独立的部分,全局函数和作为一
    个对象方法定义的函数之间没有任何区别,因为可以把全局函数和变量看作为window对象
    的方法和属性。也可以使用new 操作符来操作一个对象的方法来返回一个对象,这样一个
    对象的方法也就可以定义为类的形式,其中的this指针则会指向新创建的对象。在后面可以
    看到,这时对象名可以起到一个命名空间的作用,这是使用JavaScript进行面向对象程序设
    计的一个技巧。例如:
    var namespace1=new Object();
    namespace1.class1=function(){
    //初始化对象的代码
    }
    var obj1=new namespace1.class1();
    这里就可以把namespace1 看成一个命名空间。
    由于对象属性(方法)的动态变化特性,一个对象的两个属性(方法)之间的互相引用,
    必须要通过this指针,而在传统语言中,this关键字是可以省略的。但是上面的例子中:
    obj1.getP=function(){
    alert(this.p); //表面上this指针指向的是obj1
    }
    这里的this 关键字是不可省略的,即不能写成alert(p)的形式。这将使得getP 函数去引
    用上下文环境中的p变量,而不是obj1 的属性。

  • 相关阅读:
    线程池:第二章:线程池实际中使用哪一个
    实战:第五章:EZDML修改数据类型
    面试:第十四章:大厂中高级java程序员面试题
    服务网关Zuul路由转发
    启动zipkin服务
    安装Elasticsearchhead
    Zuul 路由熔断
    Unable to find local grunt.
    Kibana安装
    sleuth zipkin链路追踪
  • 原文地址:https://www.cnblogs.com/shaohz2014/p/3825792.html
Copyright © 2020-2023  润新知