• 軟件測試技術
  • 軟件測試博客
  • 軟件測試視頻
  • 開源軟件測試技術
  • 軟件測試論壇
  • 軟件測試沙龍
  • 軟件測試資料下載
  • 軟件測試雜志
  • 軟件測試人才招聘
    暫時沒有公告

字號: | 推薦給好友 上一篇 | 下一篇

理解JavaScript面向對象的思路[2]

發布: 2009-11-12 10:03 | 作者: 不詳 | 來源: 領測軟件測試網采編 | 查看: 32次 | 進入軟件測試論壇討論

領測軟件測試網 理解JavaScript面向對象的思路[2]  Java開發

關鍵字:JavaScript 面向對象

  按照標準,這個[[prototype]]語言使用者是無法訪問的,不過FireFox的JS引擎把[[prototype]]暴露出來,作為公有屬性"__proto__",這樣,我們就可以通過操作原型對象來控制一組對象的行為。我們可以借用FF提供的便利來了解一下[[prototype]]的工作原理:

  var proto={a:1};

  var m={__proto__:proto};

  var n={__proto__:proto};

  alert([m.a,n.a]);

  proto.a=2;

  alert([m.a,n.a]);

  JS規定了一個內建對象作為所有對象的最終[[prototype]],也就是說即使用{}創建的對象,也會有[[prototype]]指向這個內建對象。

  通過這個機制,我們完全可以得到跟基于類的語言相當程度的對象復用能力——但是當然我們還需要函數。在JS中,函數僅僅是一種特殊的對象,JS設計了()運算符和function關鍵字讓JS的函數看起來更像是傳統的語言。只要實現了私有方法[[call]]的對象都被認為是函數對象(這個[[call]]跟大家比較熟悉的Function.prototype.call完全是兩回事),類似[[prototype]],[[call]]也是語言使用者完全無法訪問的,這一次FF也沒有為我們提供公有屬性來替代。

  本來到這里為止,JS的面向對象已經很完整了,但是JS為了讓自己的語法看起來更像是Java之類的語言,又引入了new關鍵字,在上面大部分語言中new都是針對類來做的,而JS沒有類,甚至沒有聲明域,所以這個new還是要在對象上做文章,new會調用私有方法[[contruct]],任何實現了[[construct]]的對象都可以被new接受。然而如何才能讓一個對象可以被new呢?JS并沒有額外提供構造這種對象方法,所以所有通過function關鍵字構造的函數對象被設計成實現了[[construct]]方法。這也就是JS的new很奇怪地針對函數的原因。值得一提的是,并非只有函數可以被new,JS的宿主環境可能提供一些其它對象,典型的例子是IE中的ActiveXObject.

  所有函數的[[construct]]方法都是類似的:創建一個新的對象,將它的[[prototype]]設為函數對象的共有屬性prototype,以新對象做為this指針的值,執行函數對象

  這樣對同一函數的new運算實際上創建了相似的對象:擁有共同的原型[[prototype]],被同一函數處理過。這樣的new運算就很類似Class了,同時由于JS的動態性,所有的"類"在運行時任你宰割,想要模擬繼承之類的行為也就很容易了,由于是弱類型且是動態函數,不存在需要多態的問題,JS完全可以做到基于類的面向對象。

  最后提供幾道題,大家茶余飯后寫完程序不妨做做,都做對說明你已經理解了protype-based javascript

  (請用FF來看結果)

  Function.prototype.prop=1;

  alert(Object.prop)

  alert(Function.prop)

  

延伸閱讀

文章來源于領測軟件測試網 http://www.anti-gravitydesign.com/

TAG: JavaScript Javascript javascript 面向對象 思路

21/212>

關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97