================================================================================ 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, ' '); document.writeln(obj2 instanceof MyObject, ' '); 我们看到,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); |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-30 21:29 , Processed in 0.170584 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.