JavaScript學習筆記六:prototype的提出

作者: 飛林沙  來源: 博客園  發布時間: 2010-01-19 10:24  閱讀: 3981 次  推薦: 3   原文鏈接   [收藏]  

系列文章導航:

JavaScript學習筆記一——數據類型

JavaScript學習筆記二——函數

JavaScript學習筆記三——作用域

JavaScript學習筆記四——Eval函數

JavaScript學習筆記五——類和對象

JavaScript學習筆記六:prototype的提出

Javascript學習筆記七——原型鏈的原理

Javascript學習筆記八——用JSON做原型

Javascript學習筆記九——prototype封裝繼承

Javascript學習筆記十——網頁運行原理

Javascript學習筆記十一——包裝DOM對象

Javascript學習筆記十三——關于響應事件

Javascript學習筆記十二——Ajax入門

 

  首先我們繼續上文的代碼,我們來把這段代碼延伸一下:

    <script type="text/javascript">
        var Person = function (name, age) {
            this.name = name;
            this.age = age;
            this.Introduce = function () {
                alert("My name is " + this.name + ".I'm " + this.age);
            };
        };
        var person1 = new Person("飛林沙", 21);
        var person2 = new Person("kym", 26);
        alert(person1.Introduce == person2.Introduce);
    script>

 

  結果彈出false。也就是說,這兩個對象的方法是不同的方法。那么我們知道,在C#中,每個對象會維護著一個方法表,可是方法表應該指向同一塊地址。如果是這樣的話,那當我們聲明了100個對象,是不是要建立100個對象拷貝,對空間是不是一個很大的浪費呢?

  于是我們就想了這樣的解決辦法,用prototype:

    <script type="text/javascript">
        var Person = function (name, age) {
            this.name = name;
            this.age = age;
        };
        Person.prototype.Introduce = function () {
            alert("My name is " + this.name + ".I'm " + this.age);
        }
        var person1 = new Person("飛林沙", 21);
        var person2 = new Person("kym", 26);
        alert(person1.Introduce == person2.Introduce);
    script>

 

  這樣就可以了。所以你還會再說是否用prototype都是一樣的么?其實我以前也是這么理解的,在這次偶然的試驗中看到了這個問題。

3
0
 
標簽:JavaScript
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()