2013-09-26 79 views
3

我讀過關於原型與僞古典實例化的其他幾篇文章,但仍有幾個問題。我已經包含下面的代碼來說明。Javascript Prototypal實例化與僞古典實例化

的問題是:

  1. 是人實際上是相同的人?
  2. John和Alice基本上是一樣的嗎?
  3. 從一種方式對另一種方式會產生哪些副作用?
  4. 我應該知道有什麼重大的性能問題嗎?

    var Person = function() { 
    hopes: function(){}, 
    dreams: function(){} 
    }; 
    
    var John = Object.create(Person); // not supported in older browsers 
    

    -

    var Human = function() { 
    }; 
    
    Human.prototype.hopes = function(){}; // could add both hopes & dreams with an object 
    Human.prototype.dreams = function(){}; 
    
    var Alice = new Human(); 
    

回答

1

你的語法是有點過了第一個例子,但是請注意,這將導致類似的對象。在第一個例子中,它應該是:

var Person = { 
hopes: function(){}, 
dreams: function(){} 
}; 

雖然有一些細微的差異。使用關鍵字new可以將對象添加到原型鏈中,例如, Alice現在將使用Human的原型鏈。 Object.create將對象的原型設置爲參數,例如PersonJohn的原型。除非你做了Object.create(null),這些情況通常是相似的,在這種情況下,你不會像獲得新的Object()一樣獲得基本的對象原型。

您可以在這裏運行性能測試http://jsperf.com/obj-create-vs-new/4