Javascript 原型(prototype)实例化与伪经典实例化

标签 javascript instantiation prototypal

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

问题是:

  1. Person 实际上与 Human 相同吗?
  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();
    

最佳答案

在第一个例子中你的语法有点不对,但是是的,这些会产生相似的对象。在第一个例子中,它应该是:

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

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

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

关于Javascript 原型(prototype)实例化与伪经典实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19018628/

相关文章:

javascript - 无需 AJAX 即可搜索 JSON 数据

c# - 如何使用 C#/.NET 的反射在程序集中实例化类?

javascript - 了解原型(prototype)继承

java - Gettin 枚举类型可能无法实例化异常

c# - 为什么私有(private)成员变量可以被类实例改变?

javascript - (开源)JavaScript 原型(prototype) OO 示例

javascript - 比较数组并删除不匹配的值

javascript - jQuery 性能 : $ ('#selector' ). live() 与手动绑定(bind)(使用 ajax 请求时)

javascript - 如何等待元素在柏树中消失?