问题标签 [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.
php - PHP 中的原型继承(如 JavaScript)
是否可以在 PHP 中使用某种原型继承,就像在JavaScript中实现的那样?
出于好奇,我想到了这个问题,而不是我必须实现这样的事情并违背经典继承。这只是一个有趣的探索领域。
是否有预构建函数将 PHP 中的经典继承模型与某种原型继承与匿名函数的组合相结合?
假设我有一个简单的 UserModel 类
javascript - Javascript 找到原型链的开始
如果我将一个函数设置为 Object.prototype,并尝试从对象 Foo 调用该函数,该函数有没有办法知道最初调用它的对象是什么?
谢谢!
javascript - 如何查看 Javascript 对象的原型链?
给定以下代码:
我们可以留下a
已添加到b
的原型链中。伟大的。并且,以下所有内容都是正确的:
我的问题是,如果我们不b1
提前知道起源怎么办?我们如何发现其原型链的成员?理想情况下,我想要一个类似[b, a, Object]
or的数组["b", "a", "Object"]
。
这可能吗?我相信我已经在 SO 的某个地方看到了一个答案,该答案描述了如何找出这一点,但我终生无法再次找到它。
javascript - 从构造函数中将方法附加到原型
这是在 JavaScript 中描述“类”或构造函数的教科书标准方法,直接来自JavaScript 权威指南:
我不喜欢这里的悬空原型操作,所以我试图想一种方法来封装area
构造函数内部的函数定义。我想出了这个,我没想到它会起作用:
我没想到这会起作用,因为函数this
内部的引用area
应该指向area
函数本身,所以我无法访问width
和height
从this
. 但事实证明我愿意!
一些进一步的测试证实,函数this
内部的引用area
实际上是对正在构建的对象的引用,而不是 area 函数本身。
原来警报弹出,并且this
正是正在构建的对象。那么这里发生了什么?为什么this
不是this
我期望的那样?
javascript - 使用“this =”的 Javascript 函数给出“分配中的左侧无效”
我试图让一个 JavaScript 对象使用另一个对象的构造函数的“this”赋值,并假设所有对象的原型函数。这是我试图完成的一个例子:
我很感激您对如何让 ObjY 将 ObjX 的赋值包含到“this”(即不必重复this.$* = *
ObjY 的构造函数中的所有赋值)并让 ObjY 假定 ObjX.prototype 的想法。
我的第一个想法是尝试以下方法:
理想情况下,我想以原型的方式学习如何做到这一点(即不必使用任何像Base2这样的“经典”OOP 替代品)。
值得注意的是,ObjY 将是匿名的(例如factory['ObjX'] = function(a,b,c) { this = ObjX(a,b*12); ... }
)——如果我的术语正确的话。
谢谢你。
javascript - 带有原型的 Javascript 函数继承
在 Douglas Crockford 的JavaScript: The Good Parts中,他建议我们使用函数继承。这是一个例子:
我遇到的主要问题是每次我创建一个mammal
或cat
JavaScript 解释器时都必须重新编译其中的所有函数。也就是说,您无法在实例之间共享代码。
我的问题是:如何让这段代码更有效率?例如,如果我正在制作数千个cat
对象,那么修改此模式以利用prototype
对象的最佳方法是什么?
javascript - 使用'new'调用函数比没有它便宜吗?
鉴于这个非常熟悉的原型构建模型:
谁能解释为什么调用new Rectangle(2,3)
总是比Rectangle(2,3)
没有“新”关键字的调用快 10 倍?我会假设,因为 new 通过涉及原型增加了函数执行的复杂性,所以它会更慢。
例子:
产量(在 Chrome 中):
javascript - Crockford 的对象创建技术发生了什么?
只有 3 行代码,但我无法完全掌握这一点:
(来自原型继承)
Object.create()
首先创建一个名为F
. 我认为函数是一种对象。这个F
对象存储在哪里?在全球范围内,我猜。接下来我们
oldObject
传入的 aso
成为函数的原型F
。函数(即对象)F
现在从 our 中“继承”oldObject
,因为名称解析将通过它进行路由。很好,但我很好奇对象的默认原型是什么,对象?函数对象也是如此吗?最后,
F
被实例化并返回,成为我们的newObject
. 这里的new
操作是严格必要的吗?还没有F
提供我们需要的东西,或者功能对象和非功能对象之间是否存在关键区别?显然,使用这种技术不可能有一个构造函数。
下一次会发生什么Object.create()
?全局函数是否F
被覆盖?当然它不会被重用,因为这会改变以前配置的对象。如果多个线程调用会发生什么Object.create()
,是否有任何同步来防止竞争条件F
?
c# - C# 4.0 的 ExpandoObject 是否支持基于原型的继承?
C# 4.0 的ExpandoObject是否支持基于原型的继承?如果不是,为什么不(这是设计使然?)以及如何实施?如果是,它是如何工作的,与它在 Javascript 中的工作方式相比有什么不同?
python - 实现原型或实例化类对象
updated 2010-06-15T09:45:00Z
:
- 添加了“作为实例的类”方法的示例,以及对“作为类的实例”方法的解释;合并并引用了 Alex Martelli 的回答;
我想知道如何在 Python 中实现原型继承。这个问题似乎有两种不同的方法:作为实例的类和作为类的实例。
第二种方法似乎更灵活,因为它可以应用于各种类型的现有对象,而第一种方法对于典型用例可能更方便。
类作为实例
这里的想法是使用元类使实例化实际上是类,而不是对象。这种方法看起来像这样:
我没有用这种方法真正测试过任何复杂的东西,所以它可能有局限性。
作为类的实例
使用这种方法,想法是使用type
构造函数从对象创建类。这在Alex Martelli 的回答中得到了例证,尽管他用于此方法的示例实现了复制原型,而不是允许后代继承对其原型的后续更改。
我的方法是做这样的事情:
这将以一种 javascript-y 的方式工作:对给定对象的更改不会影响其后代,但对父对象__class__
(如 javascript prototype
)的更改会。我认为这是因为type
构造函数复制 obj.__dict__
而不是在某种 mro-ish 方案中引用它。
我试图实现一个允许真正的原型继承的改进版本,其中对象将继承对父对象的更新。这个想法是将原型对象的__dict__
属性分配给新创建的类的相同属性,即成为后代对象的类的属性。
但是,这并没有成功,因为我发现__dict__
atype
不能分配给;此限制也适用于从type
. 我仍然很好奇是否有可能通过创建一个“实现类型协议”的对象来解决这个问题,就像对可迭代对象、序列等所做的那样,但实际上并不继承自type
. 这可能会产生其他问题,例如亚历克斯在回答的第一部分中提到的授权方法所固有的问题。
代表团
Alex 还提出了第三种方法,即委托,其中对象的状态通过__getattr__
魔术方法传播到后代对象。同样,请参阅 Alex 的答案作为示例,以及有关此方法限制的详细信息。
特此要求进一步了解这些方法的实用性以及替代建议。