Javascript Prototypal instantiation vs Pseudoclassical instantiation

时间:2013-09-26 03:05:04

标签: javascript instantiation 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 个答案:

答案 0 :(得分: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

运行效果测试