【发布时间】:2015-04-26 18:46:00
【问题描述】:
这两种原型继承实现之间有什么区别,考虑到我们正在使用 2 种不同的“原型”(仅在函数上的原型属性和内部原型),以及这些实现的不同之处原型链查找?另外,第一个实现(使用原型属性)是否依赖于我们对new 运算符的使用?
分配给函数的prototype 属性并使用new 运算符:
function foo() {}
foo.prototype.output = function(){
console.log('inherits from Function.prototype property');
};
bar = new foo();
bar.output();
将函数存储在对象字面量中并使用Object.create() 方法:
var foo = {
output: function(){
console.log('inherits from the internal prototype');
}
};
var bar = Object.create(foo);
bar.output();
【问题讨论】:
-
一个区别是
Object.create更新,IE8及以下不支持 -
我在您的示例中没有看到原型继承。
-
@hindmost 你能详细说明一下吗?
-
我认为@hindmost 的意思是它不是继承(从上到下),而是委托。对象的功能依赖于其他对象,而不是它们的“祖先”,因为它们没有任何功能。
-
Kyll 获取了 Kyle SImpson 关于该主题的图表。我建议自己阅读整个链接章节。
标签: javascript inheritance prototype prototypal-inheritance