问题标签 [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.

0 投票
1 回答
1095 浏览

php - PHP 中的原型继承(如 JavaScript)

是否可以在 PHP 中使用某种原型继承,就像在JavaScript中实现的那样?

出于好奇,我想到了这个问题,而不是我必须实现这样的事情并违背经典继承。这只是一个有趣的探索领域。

是否有预构建函数将 PHP 中的经典继承模型与某种原型继承与匿名函数的组合相结合?

假设我有一个简单的 UserModel 类

0 投票
2 回答
146 浏览

javascript - Javascript 找到原型链的开始

如果我将一个函数设置为 Object.prototype,并尝试从对象 Foo 调用该函数,该函数有没有办法知道最初调用它的对象是什么?

谢谢!

0 投票
4 回答
7520 浏览

javascript - 如何查看 Javascript 对象的原型链?

给定以下代码:

我们可以留下a已添加到b的原型链中。伟大的。并且,以下所有内容都是正确的:

我的问题是,如果我们不b1提前知道起源怎么办?我们如何发现其原型链的成员?理想情况下,我想要一个类似[b, a, Object]or的数组["b", "a", "Object"]

这可能吗?我相信我已经在 SO 的某个地方看到了一个答案,该答案描述了如何找出这一点,但我终生无法再次找到它。

0 投票
5 回答
3454 浏览

javascript - 从构造函数中将方法附加到原型

这是在 JavaScript 中描述“类”或构造函数的教科书标准方法,直接来自JavaScript 权威指南

我不喜欢这里的悬空原型操作,所以我试图想一种方法来封装area构造函数内部的函数定义。我想出了这个,我没想到它会起作用:

我没想到这会起作用,因为函数this内部的引用area应该指向area函数本身,所以我无法访问widthheightthis. 但事实证明我愿意!

一些进一步的测试证实,函数this内部的引用area实际上是对正在构建的对象的引用,而不是 area 函数本身。

原来警报弹出,并且this正是正在构建的对象。那么这里发生了什么?为什么this不是this我期望的那样?

0 投票
1 回答
8791 浏览

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); ... })——如果我的术语正确的话。

谢谢你。

0 投票
4 回答
5508 浏览

javascript - 带有原型的 Javascript 函数继承

在 Douglas Crockford 的JavaScript: The Good Parts中,他建议我们使用函数继承。这是一个例子:

我遇到的主要问题是每次我创建一个mammalcatJavaScript 解释器时都必须重新编译其中的所有函数。也就是说,您无法在实例之间共享代码。

我的问题是:如何让这段代码更有效率?例如,如果我正在制作数千个cat对象,那么修改此模式以利用prototype对象的最佳方法是什么?

0 投票
1 回答
3863 浏览

javascript - 使用'new'调用函数比没有它便宜吗?

鉴于这个非常熟悉的原型构建模型:

谁能解释为什么调用new Rectangle(2,3)总是比Rectangle(2,3)没有“新”关键字的调用快 10 倍?我会假设,因为 new 通过涉及原型增加了函数执行的复杂性,所以它会更慢。

例子:

产量(在 Chrome 中):

0 投票
4 回答
6240 浏览

javascript - Crockford 的对象创建技术发生了什么?

只有 3 行代码,但我无法完全掌握这一点:

(来自原型继承

  1. Object.create()首先创建一个名为F. 我认为函数是一种对象。这个F对象存储在哪里?在全球范围内,我猜。

  2. 接下来我们oldObject传入的 aso成为函数的原型F。函数(即对象)F现在从 our 中“继承” oldObject,因为名称解析将通过它进行路由。很好,但我很好奇对象的默认原型是什么,对象?函数对象也是如此吗?

  3. 最后,F被实例化并返回,成为我们的newObject. 这里的new操作是严格必要的吗?还没有F提供我们需要的东西,或者功能对象和非功能对象之间是否存在关键区别?显然,使用这种技术不可能有一个构造函数。

下一次会发生什么Object.create()?全局函数是否F被覆盖?当然它不会被重用,因为这会改变以前配置的对象。如果多个线程调用会发生什么Object.create(),是否有任何同步来防止竞争条件F

0 投票
1 回答
1610 浏览

c# - C# 4.0 的 ExpandoObject 是否支持基于原型的继承?

C# 4.0 的ExpandoObject是否支持基于原型的继承?如果不是,为什么不(这是设计使然?)以及如何实施?如果是,它是如何工作的,与它在 Javascript 中的工作方式相比有什么不同?

0 投票
2 回答
1647 浏览

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 的答案作为示例,以及有关此方法限制的详细信息。

特此要求进一步了解这些方法的实用性以及替代建议。