3

我阅读了其他几篇关于原型与伪经典实例化的文章,但仍有一些问题。我在下面包含了代码以供说明。

问题是:

  1. 人实际上与人类相同吗?
  2. 约翰和爱丽丝本质上是一样的吗?
  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();
    
4

1 回答 1

1

在第一个示例中,您的语法有点偏离,但是是的,这些将导致相似的对象。在第一个示例中,它应该是:

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

不过也有一些细微的差别。使用new关键字会导致一个对象被添加到原型链中,例如Alice,现在将使用Human' 原型链。Object.create将对象的原型设置为参数,例如PersonisJohn的原型。这些通常是相似的,除非您这样做Object.create(null),在这种情况下,您不会像执行 new Object(); 那样获得基本对象原型。

您可以在此处运行性能测试http://jsperf.com/obj-create-vs-new/4

于 2013-09-26T03:48:18.240 回答