JavaScript的prototype是什麼

來源:互聯網
上載者:User

所有對象都有prototype,prototype自身也是對象,它有prototype,這樣就形成了prototype鏈。當遇到有鏈中為null時,鏈就終止了,object的prototype就是null.
上面內容http://www.javaeye.com/article/53537有介紹,
然而有太多問題需要想明白了。
prototype它是一種資料結構,還是別的什麼。
function class1(name)
{
    this.class1Name=name;
}
function class2(name)
{
    this.class2Name=name;
}
function class3(name)
{
   this.class3Name=name;
}
class3.prototype=new class1('class1');//把一個對象class1替換(用這個詞感覺不對)prototype
class3.prototype.abc='abc';然而此時還能通過prototype添加屬性。 目前按照我的理解,prototype不是一個簡單的對象。
class3.prototype=new class2('class2');//這一步後abc屬性就不存在了。

接下來說一下對象對屬性的訪問。
這個是上面連結中的原話:
讀操作會讀取在obj自己和prototype 鏈上發現的第一個同名屬性值
寫操作會為obj對象本身建立一個同名屬性(如果這個屬性名稱不存在
這裡要注意同名屬性,如下
function class1()
{
   this.className='class1';
}
function class2()
{}
class2.prototype=new class1();
alert(new class2().className)//這裡結果為class1;說明訪問到了class1中的className屬性。
class2.prototype.class1=new class1();
alert(new class2().className)//這裡結果為undefined,說明沒有訪問到className屬性。
所以在屬性訪問上是根據屬性名稱的,就算這個屬性held的是一個對象。而不會去訪問到下面的prototype中去。

下面說一下this這個關鍵字。
function class1(name)
{
    this.user=name;
}
class1.prototype=
{
    firstName:function()
        {
            return this.user;
        }
}
function class2(name)
{
    this.name=name;
}
class2.prototype=new class1('class1');
alert(new class2('class2').firstName());//這裡結果應該能想到是class1.
但是如果這樣寫,把function class1的的代碼改成如下:
function class1(name)
{
   this.name=name;
}
class1.prototype=
{
   firstName:function()
      {
         return this.name;
      }
}

alert(new class2('class2').firstName());//此時輸出的結果就是class2;
開始class2訪問firstName方法,它便在自己成員中尋找,沒有找到,就在prototype中尋找。這時它在class1中找到了fristName
而class1中firstName方法返回this.name,這個this指的還是class2.所以它又會在class2的成員中尋找。所以這裡的結果是class2;

對JavaScript一直都不太清楚,現在更迷惑了。希望明白人說一下。
另外Function 和Object是個奇怪的東西。

相關文章

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.