zoukankan      html  css  js  c++  java
  • JavaScript面向对象的支持(3)

    ================================================================================
    Qomolangma OpenProject v0.9


    类别    :Rich Web Client
    关键词  :JS OOP,JS Framwork, Rich Web Client,RIA,Web Component,
              DOM,DTHML,CSS,JavaScript,JScript

    项目发起:aimingoo (aim@263.net)
    项目团队:aimingoo, leon(pfzhou@gmail.com)
    有贡献者:JingYu(zjy@cnpack.org)
    ================================================================================

    八、JavaScript面向对象的支持
    ~~~~~~~~~~~~~~~~~~
    (续)


    2. JavaScript面向对象的支持
    --------
    (续)

     5). 使用instanceof关键字的运算
     ------
     在JavaScript中提供了instanceof关键字来检测实例的类型。这在前面讨
    论它的“五重身份”时已经讲过。但instanceof的问题是,它总是列举整个
    原型链以检测类型(关于原型继承的原理在“构造与析构”小节讲述),如:
    //---------------------------------------------------------
    // instanceof使用中的问题
    //---------------------------------------------------------
    function MyObject() {
      // ...
    }

    function MyObject2() {
      // ...
    }
    MyObject2.prototype = new MyObject();

    obj1 = new MyObject();
    obj2 = new MyObject2();

    document.writeln(obj1 instanceof MyObject, '<BR>');
    document.writeln(obj2 instanceof MyObject, '<BR>');

    我们看到,obj1与obj2都是MyObject的实例,但他们是不同的构造函数产生
    的。——注意,这在面向对象理论中正确的:因为obj2是MyObject的子类实
    例,因此它具有与obj1相同的特性。在应用中这是obj2的多态性的体现之一。

    但是,即便如此,我们也必须面临这样的问题:如何知道obj2与obj1是否是
    相同类型的实例呢?——也就是说,连构造器都相同?

    instanceof关键字不提供这样的机制。一个提供实现这种检测的能力的,是
    Object.constructor属性。——但请先记住,它的使用远比你想象的要难。

    好的,问题先到这里。constructor属性已经涉及到“构造与析构”的问题,
    这个我们后面再讲。“原型继承”、“构造与析构”是JavaScript的OOP中
    的主要问题、核心问题,以及“致命问题”。


     6). null与undefined
     ------
     在JavaScript中,null与undefined曾一度使我迷惑。下面的文字,有利于
    你更清晰的认知它(或者让你更迷惑):
       - null是关键字;undefined是Global对象的一个属性。
       - null是对象(空对象, 没有任何属性和方法);undefined是undefined类
         型的值。试试下面的代码:
           document.writeln(typeof null);
           document.writeln(typeof undefined);
       - 对象模型中,所有的对象都是Object或其子类的实例,但null对象例外:
           document.writeln(null instanceof Object);
       - null“等值(==)”于undefined,但不“全等值(===)”于undefined:
           document.writeln(null == undefined);
           document.writeln(null == undefined);
       - 运算时null与undefined都可以被类型转换为false,但不等值于false:
           document.writeln(!null, !undefined);
           document.writeln(null==false);
           document.writeln(undefined==false);

  • 相关阅读:
    移动开发 Native APP、Hybrid APP和Web APP介绍
    urllib与urllib2的学习总结(python2.7.X)
    fiddler及postman讲解
    接口测试基础
    UiAutomator2.0 和1.x 的区别
    adb shell am instrument 命令详解
    GT问题记录
    HDU 2492 Ping pong (树状数组)
    CF 567C Geometric Progression
    CF 545E Paths and Trees
  • 原文地址:https://www.cnblogs.com/encounter/p/2188723.html
Copyright © 2011-2022 走看看