JavaScript物件導向的支援(3)

來源:互聯網
上載者:User
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是對象(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);



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。