Javascript原型实例化与伪经典实例化

Javascript原型实例化与伪经典实例化,javascript,instantiation,prototypal,Javascript,Instantiation,Prototypal,我通读了其他几篇关于原型与伪经典实例化的文章,仍然有一些问题。我已经包括了下面的代码用于说明 问题是: 人实际上和人一样吗 约翰和爱丽丝本质上是一样的吗 一种方法与另一种方法相比会产生什么副作用 是否有任何重要的性能问题需要我注意 var Person = function() { hopes: function(){}, dreams: function(){} }; var John = Object.create(Person); // not supported in older

我通读了其他几篇关于原型与伪经典实例化的文章,仍然有一些问题。我已经包括了下面的代码用于说明

问题是:

  • 人实际上和人一样吗
  • 约翰和爱丽丝本质上是一样的吗
  • 一种方法与另一种方法相比会产生什么副作用
  • 是否有任何重要的性能问题需要我注意

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


  • 在第一个示例中,您的语法有点不正确,但是是的,这些语法将导致类似的对象。在第一个示例中,它应该是:

    var Person = {
     hopes: function(){},
     dreams: function(){}
    };
    
    但也有一些微妙的区别。使用
    new
    关键字会将对象添加到原型链中,例如
    Alice
    现在将使用
    Human
    的原型链
    Object.create
    将对象的原型设置为参数,例如
    Person
    John
    的原型。这些通常是相似的,除非您执行了
    Object.create(null)
    ,在这种情况下,您不会像执行new Object()一样获得基本对象原型

    您可以在这里运行性能测试

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