zoukankan      html  css  js  c++  java
  • Java Script面向对象(二)

    JavaScript中的面向对象【二】

     

    使用this关键字

      this关键字引用的是包含它的函数作为某个对象的方法被调用的那个对象

      这句话究竟是什么意思呢?我们通过下面的例子来解释一下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var MyObject = {};
     
    MyObject.name = 'John';
    MyObject.say = function () {
        //this关键字引用的是包含它的函数作为某个对象的方法被调用的那个对象
        return this.name + '在说话';
    };
     
    //此时的this指向了调用say()方法的MyObject对象
    alert(MyObject.say());

      我们再看下一个例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <a href="#" id="a">content</a>
     
    <script>
            function ChangeColor(){
                this.style.color = 'red';
            }
            //此时的this指向了调用ChangeColor构造器的document.getElementById('a')对象,即是id为a的这个超链接
            document.getElementById('a').onclick = ChangeColor;
     
            //此时的this指向了调用ChangeColor构造器的window对象,可是window对象没有style.color这个属性,所以报错
            ChangeColor()
    </script>

    构造器函数

      还有一个创建对象的方式:通过构造器函数。

      让我们看看一个例子:

    1
    2
    3
    4
    5
    //定义一个构造器函数
    function MyConstructor() {
        this.name = 'John';
        this.age = 19;
    }

      为了能访问这个构造器函数里的属性,你可以使用new操作符。

      像这样:

    1
    2
    3
    4
    //实例化一个对象,用new关键字
    var myCon = new MyConstructor();
    //访问对象的元素
    alert(myCon.name);

      访问这个对象的方法、对象等等与我们“JavaScript中的面向对象【一】”提到的访问方式一样的。

    构造器属性

      当一个对象创建的时候,一个特殊的属性自动分配给了它——构造器(constructor)属性。

      让我们看一下下面的例子:

    1
    2
    3
    4
    5
    6
    7
      //创建对象时自动分配的constructor属性
    document.write(myCon.constructor);
      document.write(typeof myCon.constructor);
      //它包含一个创建这个对象的构造器函数的引用,调用这个函数来创建一个新的对象
    //换句话说:我不关心对象myCon是怎么创建,我只是想创建另外一个像它的对象
    var temp = new myCon.constructor();
      document.write(temp.name);

    全局对象

      宿主环境提供了一个全局对象并且所有的全局变量实际上是全局对象的属性。如果你的宿主环境是浏览器,全局对象就是window。

      定义一个全局变量,比如:

        var a = 1;

      那么你可以以下方式访问这个全局变量:
    • 作为一个变量a
    • 作为全局对象的一个属性,比如window[‘a’]或者window.a

      

      让我们回到定义构造器函数的情况,如果我们没有用new 关键字,在这种情况下this 指向全局对象并且给this设置的所有属性都成为了全局对象的属性。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function MyConstructor() {
        this.name = 'John';
    }
    //没有使用new关键字创建一个MyConstructor,所以此时MyConstructor中的this指向了window
    //this.name 相当于 window.name
    var myCon = MyConstructor();
    //对象myCon是undefined
    alert(myCon);
    alert(name);
    alert(window.name);

    instanceof操作符  

      通过 instanceof操作符,你可以测试一个对象是否是用指定的构造器函数创建的。

      我们看下面的例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //定义一个构造器函数
      function MyConstructor() {
          this.name = 'John';
          this.age = 19;
      }
      //实例化一个对象,用new关键字
    var myCon = new MyConstructor();
     
      document.write(myCon instanceof MyConstructor);
      document.write(myCon instanceof Object);
      document.write(myCon instanceof Array);
  • 相关阅读:
    Matplotlib
    【源码解读】EOS测试插件:txn_test_gen_plugin.cpp
    EOS多节点组网:商业场景分析以及节点启动时序
    EOS商业落地利器:多签名操作与应用
    EOS技术研究:合约与数据库交互
    【精解】EOS标准货币体系与源码实现分析
    【精解】EOS智能合约演练
    Efficient&Elegant:Java程序员入门Cpp
    区块链3.0:拥抱EOS
    以太坊挖矿源码:clique算法
  • 原文地址:https://www.cnblogs.com/sungangmr/p/3216081.html
Copyright © 2011-2022 走看看