这两种原型继承的实现之间有什么区别?

shmuli

这两种原型继承的实现之间有什么区别,并考虑到我们正在使用2种不同的“原型”(仅在函数和内部原型上的prototype属性),以及这些实现在其原型链查找中有何不同? ?另外,第一个实现(使用prototype属性)是否依赖于我们对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();
是的

主要区别在于使用方式以及相关的危险。

第一个强制您new在要创建新对象时使用。语法相当丑陋(SomeConstructor.prototype.method),它有一个主要缺陷:调用一个this.name = nameParam不带属性(...)new的构造函数,将构造应用于全局对象。构造函数的行为很奇怪(创建委托给的新对象SomeConstructor.prototype,然后将构造函数应用于新对象,然后,如果构造函数返回某些内容,则将该对象替换为something)。另外,在您的示例中,foo它本身不可用,您必须创建一个新对象才能访问其功能。

第二个Object.create不强迫您使用任何协同毒性的怪癖。您没有全球污染风险。该对象foo具有可以在不创建新对象的情况下使用的功能,并且bar将简单地借用这些功能。如果需要,这种模式还可以使工厂(无需new在任何地方替换s)和对象池的实现更加容易

埃里克·埃利奥特(Eric Eliott)讲得很好,而凯尔·辛普森(Kyle Simpson)写了一整本关于原型授权的

现在,这是查找的过程:

  • 使用构造函数,就可以进行查找Constructor.prototype(不是构造函数实际内部原型,而是它的prototype属性。如果您发现它令人困惑,那么恭喜,您是人类。)在构造函数中设置其他属性。foo本身不用于查找,foo.prototype(再次,与foo.__proto__指向Function的指向不同)是用于查找的对象。
  • 随着Object.create查找的对象本身上进行(foo)。prototype该对象上没有非原型属性。

凯尔·辛普森(Kyle Simpson)的书的这一页上非常有趣的图表,它们进一步解释了这一问题。

有关new此问题的更多信息JavaScript的“ new”关键字是否有害?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

这两种冒泡排序实现之间的区别

来自分类Dev

这两种Pig数据类型之间有什么区别?

来自分类Dev

这两种在C ++中实现函数的方式有什么区别?

来自分类Dev

这两种调用基类副本分配的方式有什么区别?

来自分类Dev

递归中这两种方式有什么区别?

来自分类Dev

这两种形式的std :: map列表初始化有什么区别?

来自分类Dev

这两种创建对象文字的不同方式有什么区别

来自分类Dev

这两种PhysicsVector方法有什么区别?

来自分类Dev

这两种方式创建对象有什么区别?

来自分类Dev

这两种异步方法有什么区别?

来自分类Dev

这两种递归方法有什么区别

来自分类Dev

这两种实现之间有什么区别?

来自分类Dev

张量流中RNN的两种实现之间有什么区别?

来自分类Dev

递归算法的这两种实现有什么区别?

来自分类Dev

这两种情况有什么区别?

来自分类Dev

Javascript中这两种要求之间有什么区别?

来自分类Dev

如果这两种Perl书写风格有什么区别,为什么结果不同?

来自分类Dev

C#属性,这两种实现之间有什么区别?

来自分类Dev

这两种用JavaScript编写原型函数的方式有什么区别

来自分类Dev

这两种结构有什么区别

来自分类Dev

两种继承有什么区别?

来自分类Dev

这两种在C ++中实现函数的方式有什么区别?

来自分类Dev

这两种函数声明有什么区别?

来自分类Dev

这两种语法有什么区别?

来自分类Dev

这两种ER设计之间有什么区别吗?

来自分类Dev

递归算法的这两种实现有什么区别?

来自分类Dev

这两种 Scala 模式有什么区别?

来自分类Dev

这两种做法有什么区别:

来自分类Dev

这两种集群配置有什么区别?

Related 相关文章

热门标签

归档