我阅读了其他几篇关于原型(prototype)实例化与伪经典实例化的文章,但仍有一些问题。我在下面包含了代码以供说明。
问题是:
- Person 实际上与 Human 相同吗?
- John 和 Alice 本质上是一样的吗?
- 一种方法与另一种方法相比会产生哪些副作用?
是否有任何我应该注意的重大性能问题?
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)设置为参数,例如Person
是John
的原型(prototype)。这些通常是相似的,除非您执行 Object.create(null)
,在这种情况下,您不会像执行 new Object(); 那样获得基本对象原型(prototype);
您可以在这里运行性能测试http://jsperf.com/obj-create-vs-new/4
关于Javascript 原型(prototype)实例化与伪经典实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19018628/