Javascript 原型属性'

伟大的斯科特

我正在遵循 javascript 中关于“函数构造函数”和“原型链”的逻辑,但是我试图解决原型链的重要性,即它究竟是如何被需要的。

函数构造函数对于创建对象很有用,--对吗?因此,在使用“函数构造函数”创建对象时,该对象是否尚未拥有指向链中更高位置的“全局对象”的指针?...如果是这样,为什么还要包含这个“原型属性”呢?或者...原型属性是否真的“实例化”了将函数对象链接到全局对象的继承链。

如果原型属性没有实例化对象的本地和全局上下文之间的链接,为什么还要包含它呢?如果我从函数构造函数的属性列表中省略原型属性,会发生什么变化?

我只需要在原型属性的目的背后有一个清晰、简洁的原因,这在这一点上是有道理的,但就它如何对继承链做出贡献而言仍然没有意义。

谢谢阅读。

约瑟夫

我只需要在原型属性的目的背后有一个清晰、简洁的原因,这在这一点上是有道理的,但就它如何对继承链做出贡献而言仍然没有意义。

让我们以这段代码为例:

function Foo(prop) {
  this.fooProperty = prop
}

Foo.prototype.greetFoo = function() {
  console.log('hi from foo')
}

function Bar(prop1, prop2) {
  Foo.call(this, ...arguments)
  this.barProperty = prop2
}

// Replace the default Bar.prototype object with one that links to Foo.prototype
Bar.prototype = Object.create(Foo.prototype)
Bar.prototype.greetBar = function() {
  console.log('hi from bar')
}

const barInstance1 = new Bar('baz', 'rar')
const barInstance2 = new Bar('qum', 'yas')

barInstance1.greetFoo()
barInstance2.greetFoo()
barInstance1.greetBar()
barInstance2.greetBar()

以上将产生以下原型链:

Object.prototype <- Foo.prototype <- Bar.prototype <- barInstance1
                    > greetFoo()     > greetBar()     > fooProperty = 'baz'
                                                      > barProperty = 'rar'
                                                   <- barInstance2
                                                      > fooProperty = 'qum'
                                                      > barProperty = 'yas'

在传统的 OOP 中,类是“蓝图”,实例是从实例化类的继承层次结构的“扁平/合并”蓝图创建的对象。JS“继承”的工作方式与此不同。JS 继承使用链接的、活动的对象的层次结构,而不是蓝图。

当你访问实例上没有的东西(比如greetFoo()greetBar())时,JS 会递归查找链来找到它。该链可能涉及其他原型,具有更多功能。这就是 JS“代码共享”的工作原理。

在上面的例子中,

  • barInstance1barInstance2链接到Bar.prototype. 两个实例现在都有greetBar().
  • Bar.prototype也链接到Foo.prototype,这意味着实例也会得到greetFoo
  • 最后,Foo.prototype链接到内置Object.prototype,使所有实例都可以访问所有原生对象的方法,如hasOwnPropertytoString()等。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaScript原型属性

来自分类Dev

JavaScript原型属性

来自分类Dev

Javascript 对象的原型属性

来自分类Dev

Javascript原型属性:基于原型的继承

来自分类Dev

Javascript中的对象原型属性

来自分类Dev

Javascript不继承原型属性

来自分类Dev

Javascript中的对象原型属性

来自分类Dev

javascript中对象的原型属性

来自分类Dev

具有原型的JavaScript继承-'constructor'属性?

来自分类Dev

在Javascript中,“ for ... in”不会迭代原型的属性吗?

来自分类Dev

javascript对象原型属性未更新

来自分类Dev

JavaScript中的原型和属性继承

来自分类Dev

Javascript-有原型和属性的帮助?

来自分类Dev

列出Javascript对象的所有原型属性

来自分类Dev

JavaScript原型属性描述符

来自分类Dev

Javascript基本原型-无法更新属性

来自分类Dev

具有原型的JavaScript继承-'constructor'属性?

来自分类Dev

Javascript-构造函数的属性和原型

来自分类Dev

在Javascript中,“ for ... in”不会迭代原型的属性吗?

来自分类Dev

如何获得Javascript对象原型的属性?

来自分类Dev

如何从javascript类中访问原型属性?

来自分类Dev

此javascript属性是实例属性还是原型属性?

来自分类Dev

在构造函数中初始化的JavaScript原型属性不会用分配的新原型覆盖

来自分类Dev

原型获取器访问的Javascript私有属性

来自分类Dev

原型中具有数字属性的Javascript对象

来自分类Dev

如何将属性添加到原型(javascript)

来自分类Dev

如何使用未分配的属性创建Javascript构造函数/原型?

来自分类Dev

Javascript未设置原型对象中未定义的属性

来自分类Dev

如何在javascript中从原型访问对象属性?

Related 相关文章

热门标签

归档