JavaScript面向对象的支持(3)

javascript|对象

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

时间: 2024-10-04 00:27:30

JavaScript面向对象的支持(3)的相关文章

JavaScript面向对象的支持(4)

javascript|对象 ================================================================================Qomolangma OpenProject v0.9 类别    :Rich Web Client关键词  :JS OOP,JS Framwork, Rich Web Client,RIA,Web Component,          DOM,DTHML,CSS,JavaScript,JScript 项目发

JavaScript面向对象的支持(1)

javascript|对象 ================================================================================Qomolangma OpenProject v0.9 类别    :Rich Web Client关键词  :JS OOP,JS Framwork, Rich Web Client,RIA,Web Component,          DOM,DTHML,CSS,JavaScript,JScript 项目发

JavaScript面向对象的支持(6)

javascript|对象 ======================================================================Qomolangma OpenProject v0.9 类别    :Rich Web Client关键词  :JS OOP,JS Framwork, Rich Web Client,RIA,Web Component,          DOM,DTHML,CSS,JavaScript,JScript 项目发起:aimingoo

JavaScript面向对象的支持(5)

javascript|对象 ======================================================================Qomolangma OpenProject v0.9 类别    :Rich Web Client关键词  :JS OOP,JS Framwork, Rich Web Client,RIA,Web Component,          DOM,DTHML,CSS,JavaScript,JScript 项目发起:aimingoo

JavaScript面向对象的支持(下)

八.JavaScript面向对象的支持 4. 实例和实例引用 在.NET Framework对CTS(Common Type System)约定"一切都是对象",并分为"值类型"和"引用类型"两种.其中"值类型"的对象在转换成"引用类型"数据的过程中,需要进行一个"装箱"和"拆箱"的过程.在JavaScript也有同样的问题.我们看到的typeof关键字,返回以下六种

JavaScript面向对象的支持(2)

javascript|对象 ================================================================================Qomolangma OpenProject v0.9 类别    :Rich Web Client关键词  :JS OOP,JS Framwork, Rich Web Client,RIA,Web Component,          DOM,DTHML,CSS,JavaScript,JScript 项目发

JavaScript面向对象的支持(上)

很少有人对JavaScript的面向对象特性进行系统的分析.我希望接下来的文字让你了解到这个语言最少为人知的一面. 1. JavaScript中的类型 -------- 虽然JavaScript是一个基于对象的语言,但对象(Object)在JavaScript中不是第一型的.JS是以函数(Function)为第一型的语言.这样说,不但是因为JS中的函数具有高级语言中的函数的各种特性,而且也因为在JS中,Object也是由函数来实现的.--关于这一点,可以在后文中"构造与析构"部分看到更

Javascript 面向对象特性_javascript技巧

1. JavaScript中的类型 -------- 虽然JavaScript是一个基于对象的语言,但对象(Object)在JavaScript中不是第一型的.JS 是以函数(Function)为第一型的语言.这样说,不但是因为JS中的函数具有高级语言中的函 数的各种特性,而且也因为在JS中,Object也是由函数来实现的.--关于这一点,可以在 后文中"构造与析构"部分看到更进一步的说明. JS中是弱类型的,他的内置类型简单而且清晰: ------------------------

javascript面向对象

在JavaScript 中引用类型是一种数据结构,将数据和功能组织在一起.它也常被称做为类,但JavaScript 中却没有类的概念.虽然JavaScript 是一门面向对象的语言,却不具备传统面向对象语言所支持的类和接口等基本结构. 如何创建一个数组,在script中创建数组有三种方式: 1.new运算符 var  user = new objcet(); user.name = "张三"; user.age=20; user.sex="男'; 2.对象字面量 var us