问题标签 [prototypal-inheritance]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 如何使用 Object.create 在 node.js 中的模块内进行继承
我有一个模块 Vehicle ,其中包含一般车辆信息。我有另一个模块 Car,它为 Vehicle 对象添加了更多功能。
我正在考虑将 Object.create 用于 Car 模块,但不确定 Object.create 调用应该去哪里。
- 我是否应该在 Car 模块中有一个构造函数,该构造函数采用 Vehicle 对象的实例,并使用 Vehicle 实例作为原型进行 Object.create ?
- 或者 Object.create 是否应该发生在 Vehicle 对象的函数中,例如 createCar?我对这种方式的问题是,Car 应该关心它是从 Vehicle 派生的,Vehicle 不应该知道 Car 需要它。
- 或者即使 Object.create 是正确的方法。
请,任何示例和最佳实践将不胜感激。
更新:
我更改了示例以更好地反映我正在尝试解决的继承问题。
javascript - 是否可以通过仅使用 apply 函数而不使用原型属性在 JavaScript 中使用继承?
我正在尝试学习 JavaScript 对象继承。我指的是 Shelley Powers 的 JavaScript Cookbook。
在子类中你需要调用 superclass.apply(this,arguments) 来使用它的属性。根据这本书,我还需要写一些类似 subclass.prototype = new superclass();
但是,我注意到不使用 subclass.prototype = new superclass(); 陈述。下面是我的代码。subclass.prototype = new superclass(); 的目的是什么?
javascript - 为什么我的 javascript Backbone.js 模型共享其父类的相同“实例”?
编辑:修复了我的示例以演示该行为。
我希望details
AbstractParent 的属性是我所说的“实例属性”,但它更像是“静态属性”。我意识到这些术语不适用于 javascript,那么为什么当我创建一个新的子类时它没有得到自己独特的 AbstractParent 原型?为什么他们共享同一个?
在下面的代码中,我希望得到一个空警报,但我得到的是“新详细信息”
这似乎只有在details
数组时才以这种方式工作。如果它是字符串或对象,则它不被ch1
and共享ch2
。
javascript - javascript中的递归原型继承?
我一直在使用这段代码来创建从以前的对象继承的新对象。然而,我遇到了一个小惊喜。
在尝试更改时,c.foo
我改为更改a.foo
,c.foo
显示更改,因为它继承自a
. 我现在看到的唯一解决方案是只修改以下的直接属性b
:
我确定我缺少更好的解决方案!如何从旧对象创建新对象而不冒修改原始对象的风险?
javascript - 获取对 2 级原型函数的“this”引用
我相当肯定这是不可能的,但想看看是否有人对如何使其成为可能有一些巧妙的想法。
我希望以下代码工作:
换句话说,我想x.a.getThis
参考this
在x
这种情况下。说得通?
为了让它深入一层很简单:
有一件事,我希望它可以作为原型工作,而不是通过手动绑定来“作弊” this
:
尽管上面是我想要实现的完美功能示例,但我只是不希望每个实例都有所有额外的功能:)
仅供参考,这里的实际用例是我正在创建类来表示节点中的 Cassandra 对象,并且我希望能够通过引用超级列 --> 列族 --> 列foo.a.b
并foo
在深层功能。
javascript - JS 函数的原型属性是做什么用的?
__proto__
我通过属性了解javascript原型继承。但是我注意到,当我这样做时,var f = function() {}
f 现在prototype
除了属性之外还有一个__proto__
属性。似乎prototype
不参与属性链接。它究竟是做什么的?
javascript - 哪些模式可以用于原型继承而不能用于类?
每个人似乎都普遍认为原型继承比类继承更简单、更灵活。我在我读过的文献中没有看到很多例子,你可以用原型继承来做你不能用经典继承来做的事情。所以我提出一个简单的问题:
有哪些模式可以用于原型继承,而不能用于类继承,以及何时/如果使用它,你会给出什么指导?
javascript - 如何创建原型函数可访问的私有变量?
我试图更深入地掌握原型继承和类创建(我知道,还有其他方法,但为此我试图掌握原型。)我的问题是:使用下面的代码示例,是有一种方法可以在内部创建私有变量,Tree
并且Fruit
不会与函数一起返回,但原型函数仍然可以访问genus
和bulk
?
编辑:我正在尝试用可以在原型函数中访问的私有变量替换this.name
和。this.size
很抱歉没有说清楚!
javascript - Object.create 与直接原型继承
我一直在玩 EcmaScript 5 规范中的 Object.create,我正在尝试创建一个多重继承类型结构。
假设我有几个函数:a、b 和 c。只处理原型,我可以这样做:
但是使用 Object.create,我会这样做:
我想我两种方式都得到相同的结果。
这似乎有点笨拙,因为我回到对象而不是构造函数。在我看来,进行常规原型继承的侵入性较小,并且对于不需要任何特殊处理即可工作的模块化应用程序更有意义。
我错过了什么吗?尝试通过制作构造函数来制作 Object.create 有什么好处吗?还是这仅对复制现有对象有用?我只想访问附加到原型的属性和函数,而不是之后添加到对象的函数和属性。
或者这个(或者使用更好的深拷贝,但想法保持不变)?
javascript - 当作为属性访问时,为什么原型构造函数中的变量未定义?
为什么是myPerson.age
未定义的?
我已经清楚地设置了Person
函数构造函数中应该由.prototype
of指向的变量myPerson
,不是吗?