2015-10-21 139 views
0

使用原型面向對象編程我是一個新手的js空中接力。 我讀書的地方,原型在OOP用於JS 確定這裏是一個例子爲什麼我們在JS

function Dog(name) { 
    this.name = name; 
    this.age = age; 
    this.bark = function() { 
     console.log("Woof"); 
    } 
} 

現在我的問題是,爲什麼我們不能只創建對象這樣

Dog doberman = new Dog; 

這將創建一個新的狗對象。

但通過原型,我們做這樣的事

var doberman = Object.create(dog); 

我讀的功能可以被分離出來,並通過原型,他們可以被添加到該對象。 請幫幫我。我很困惑..

那麼問題只是 爲什麼使用Object.prototype的方法?現在

+0

原型允許你以確保這個類的任何對象將具有(至少在開始時),該屬性(即變量,方法)。 – MaxZoom

+0

JavaScript不是類型化,所以你不能用'狗杜賓=新狗()',但你肯定可以用'VAR杜賓=新狗()' – Phil

+0

對於'Object.create',我建議你閱讀文檔〜 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create – Phil

回答

2

我的問題是,爲什麼我們不能只創建對象是這樣的:Dog dog = new Dog;

可以,實際上。你Dog功能也作爲一個「構造函數」,像這樣:

var doberman = new Dog("Fenton"); 

我明白這是令人困惑,因爲JavaScript提供這樣做(基本上)同樣的事情很多不同的方式,例如:

var doberman = { name: "Fenton", age: 5, bark: function() { return "woof"; } } 

(雖然我的第一個示例創建一個使用Dog爲原型(一種繼承關係),而我的第二個示例創建一個新的object實例與非繼承唯一實例級屬性新object比如,儘管由於JavaScript的鴨子打字th在很多時候,差異很重要(儘管高性能JavaScript總是比實例級屬性更喜歡原型構造函數)。

+0

你的意思是我們也可以在Js沒有原型的情況下做OOP?那麼它會影響性能正確的原因,因爲它們不是每個實例都重新創建的? –

+0

@MarcAndreJiacarrini是的,儘管在方法上使用原型可以爲每個實例節省內存。如果你沒有太多實例,那麼簡單地不使用原型就不會對你造成太大影響。 –

相關問題