• 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);

  • 相关阅读:
    暗时间:学习的精神和方法
    林布蘭
    魯本斯
    維梅爾
    哈爾斯.法蘭斯
    SAFEARRAY使用方法示例
    范戴克
    100个经典错别字
    在CPP中调用Jscript中的函数
    生活在真空中的程序员
  • 原文地址:https://www.cnblogs.com/encounter/p/2188723.html
Copyright © 2020-2023  润新知