js原型對象與Java類的比較


在我學習Javascript的原型對象時,我總是不自覺地拿Java的類思想來做比較,時間久了,我漸漸認識到二者有巨大的不同。

首先,類是不能直接當方法來運行,它最簡便的方式是調用其靜態方法;而原型對象本身就是一個方法體,它可以直接運行。二者在構造對象的過程中,js可以扮演兩種角色,一個可以將原型對象當方法來使用,才接觸js時,都是以這種形式來使用,即萬物皆方法體,像c;另一個是模仿面向對象的特性,為原型對象定義屬性,運用構造器時,將構造器構造的對象的指針指通過原型鏈指向原型對象的屬性,從而實現面向對象編程的形式。其實,做個有趣的實驗,定義一個原型對象,為其定義一些屬性,也為其定義可自動執行的部分代碼,如:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
<script type="text/javascript">
   function  test(){
    //定義兩個屬性
    this.pro1="屬性1";
    this.pro2="屬性2";

    //再定義部分可自動執行的代碼
    alert("原型對象中代碼被執行了!");

   }
   test();  //當方法體來用,可以執行內部代碼,但屬性無法訪問

   alert(new test().pro1); //方法體在構造時內部代碼執行了一遍,並且實例對象通過原型鏈的生成可以訪問其中屬性

</script>

</body>
</html>

  而這點,允許混雜的現象在Java類中一般是不被允許的(除非添加靜態方法塊或者main()方法入口),這也可以體現為什么js是基於對象,而不能被稱為絕對規范的完全面向對象,與其說js“模仿”了面向對象的使用思想,我更傾向於說它是借用了面向對象的思想。如果一種新的優秀的編程思想被創造出來,js一樣能憑借它的靈活模仿出來,而那些強類型的編程語言很可能就只能。。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM