2012-08-31 177 views
1

我想了解JavaScript中的繼承。我正在使用原型將子類鏈接到它的父級。但只要我定義了關係,父類的構造函數就開始運行。JavaScript繼承和構造函數

<script type="text/javascript"> 
     function Person() 
     { 
      window.alert('We\'ve got a new person!'); 
     } 

     function King() 
     { 
      window.alert('We\'ve got a new king!'); 
     } 

     King.prototype = new Person(); 

     //King.prototype.constructor = King; 
     //var erik = new King(); 
    </script> 

什麼是在JavaScript中使用繼承的正確方法?

是開始混亂教程:https://developer.mozilla.org/en-US/docs/JavaScript/Introduction_to_Object-Oriented_JavaScript

+0

檢查http://ejohn.org/blog/simple-javascript-inheritance/以及 –

+2

_「但是,只要我定義了關係,父類的構造函數就開始運行了。」_那麼,什麼是你希望在你寫'新的Person()'時發生?我在這裏沒有看到問題。 '[works-as-designed]' –

+0

對於未來的讀者;下面的文字讓我明白了JavaScript中繼承的思想: --- 即使它被用作原型,父對象仍然可以作爲常規對象來操作。這是一個類的原型的主要區別。 --- \t \t \t JavaScript中的所有對象都可以在運行時修改。由於原型對象也是常規對象,我們也可以修改它們。但是,當您修改原型對象時,其更改也會反映到其所有後代對象中。 – Erik

回答

1

這是因爲JavaScript是一種原型的語言,並沒有真正支持繼承那樣。它的對象是寬鬆的類型,可以通過額外的功能和屬性進行擴展。

所以你實際做的是創建一個Person的instance,然後可以用額外的方法進行擴展。

的tuturial狀態這樣的:

在JavaScript中,你通過分配 父類的一個實例子類,然後專門它做到這一點。

如果您習慣了真實的(基於類的)OO,那就相當混亂。

+0

非常困惑:但我需要在這裏仔細檢查。難以形象,這是由設計完成... – Erik

+0

@戈列斯 - 有些人會說Javascript/Scheme是* real * OO,而基於類的東西只是一個蒼白的副本。 –

+0

@JeremyJStarcher我知道。我應該把「真實」放在引號或其他內容中。我在這個討論中沒有強烈地選擇雙方,至少在這裏沒有。 ;) – GolezTrol