问题标签 [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 投票
4 回答
419 浏览

javascript - 如何在不需要以特定顺序包含文件的情况下利用原型继承?

在开发 JavaScript 时,我倾向于将 JavaScript 代码分离到不同的文件中,然后运行脚本来连接文件并压缩或打包生成的文件。最后,我有一个文件需要包含在我的生产站点中。

这种方法通常有效,但我开始遇到原型继承问题。具体来说,如果一个类继承自另一个类,则需要已经包含父类的文件才能使继承工作。如果我使用的连接脚本只是连接一个充满文件的目录,则子类可能出现在父类之前的代码中。像这样:

parent_class.js

child_class.js

唯一可行的方法是在 child_class.js 之前包含 parent_class.js,如果连接脚本将子代码放在父代码之前,则可能不会发生这种情况。

有没有办法编写此代码以使功能相同,但编写代码的顺序不再重要?

编辑:我忘记了我也在使用命名空间,所以我也将它添加到代码中,这可能会改变一些事情。

0 投票
4 回答
1063 浏览

javascript - JavaScript 中的原型继承

我一直在看 Douglas Crockford 在 YUI 剧院的演讲,我有一个关于 JavaScript 继承的问题......

Douglas 给出了这个例子来说明“Hoozit”继承自“Gizmo”:

为什么他写Hoozit.prototype = new Gizmo()而不是Hoozit.prototype = Gizmo.prototype

这两者有什么区别吗?

0 投票
5 回答
3424 浏览

javascript - Javascript原型继承?

为了更好地理解它,我一直在 js 中做一些继承,但我发现了一些让我感到困惑的东西。

我知道,当您使用 new 关键字调用“构造函数”时,您会得到一个引用该函数原型的新对象。

我也知道,为了进行原型继承,您必须将构造函数的原型替换为您希望成为“超类”的对象的实例。

所以我做了这个愚蠢的例子来尝试这些概念:

(这是在 Firebug 的控制台中完成的)

1) 为什么如果所有新对象都包含对创建函数原型的引用,fido.prototype 是未定义的?

2) 继承链是 [obj] -> [constructor] -> [prototype] 而不是 [obj] -> [prototype] ?

3) 是否检查过我们对象 (fido) 的“原型”属性?如果是这样......为什么'deathBite'未定义(在最后一部分)?

0 投票
8 回答
2451 浏览

javascript - 为什么在 javascript 中使用基于类的 OOP 样式继承?

如果我没有完全错,那么 JavaScript 中的每个框架/库/方法现在都倾向于模仿基于类的 OOP 样式继承。造成这种情况的原因似乎是人们认为基于类的 OOP 继承更容易理解,并且大多数程序员都知道 OOP。

以我的经验,我没有找到支持这两种观点的证据。我认为 javascript 原型继承很好(而且我怀疑将另一种范式强加于一种语言而不是它所基于的语言的有用性)。我遇到的大多数开发人员在经典 OOP 方面也不是那么好。那么选择经典 OOP 风格继承而不是原型继承的原因是什么?

0 投票
3 回答
2114 浏览

javascript - Javascript 增强基本类型(原型继承)

我刚开始阅读 Douglas Crockford 的“ Javascript The Good parts ”,他解释了增强基本类型。

完成此操作后,addMethod可用于所有基本对象,如StringNumber等。这让我感到困惑

  1. 当我没有将它添加到Object.prototype时,为什么会发生这种情况?

  2. 为什么向Function.prototype添加方法会反映在所有基本对象中?

0 投票
1 回答
94 浏览

actionscript-3 - 除了创建实例之外,如何在 ActionScript 中判断 ClassA 是否来自 ClassB?

我需要确定一个班级是否(直接或间接)从另一个班级下降。

我可以

但我讨厌创建一个实例只是为了测试祖先。我希望 if (ClassA is ClassB) 会起作用,但似乎没有。

AS 帮助状态

isPrototypeOf(theClass:Object):Boolean
指示 Object 类的实例是否在作为
参数指定的对象的原型链中。

我实际上并不了解 ActionScript 原型(我认为这可能会让我发疯),但我希望 Class 对象有某种方式可以利用它们的继承信息。

谢谢

0 投票
6 回答
14852 浏览

javascript - 在 JavaScript 中执行继承

现在,虽然我知道您不能像在 C# 中那样执行继承,但我在 Internet 上看到它提到它是可能的。如果无法使用纯 JavaScript 代码,那么是否可以使用Ext JS,如果可以,怎么办?

0 投票
11 回答
86485 浏览

javascript - JavaScript 基于原型的继承的好例子

我已经使用 OOP 语言编程超过 10 年,但我现在正在学习 JavaScript,这是我第一次遇到基于原型的继承。我倾向于通过学习好的代码来最快地学习。正确使用原型继承的 JavaScript 应用程序(或库)的编写良好的示例是什么?您能否(简要地)描述一下如何/在哪里使用原型继承,所以我知道从哪里开始阅读?

0 投票
5 回答
1117 浏览

javascript - 为什么 JavaScript 使用原型继承来实现?

有很多文章和帖子解释了 JavaScript 继承是如何工作的,但是为什么 JavaScript 使用原型继承而不是经典继承来实现呢?

我喜欢 JavaScript,所以我并不是说它是坏事……我只是好奇。

0 投票
4 回答
1977 浏览

javascript - 对 JavaScript 原型继承感到困惑

在《JavaScript 权威指南 5 版》一书中,第 9.2 节原型和继承中,我找到了以下词语:

在上一节中,我展示了 new 运算符创建一个新的空对象,然后调用构造函数作为该对象的方法。然而,这不是完整的故事。创建空对象后,new 设置该对象的原型。对象的原型是其构造函数的原型属性的值。所有函数都有一个原型属性,该属性在定义函数时自动创建和初始化。原型属性的初始值是具有单个属性的对象。这个属性被命名为constructor,并且指向与原型相关联的构造函数。(你可能还记得第 7 章中的构造函数属性;这就是为什么每个对象都有一个构造函数属性的原因。)你添加到这个原型对象的任何属性都将看起来是由构造函数初始化的对象的属性。

现在,如果这是真的,原型继承怎么可能存在呢?我的意思是,假设构造函数的原型对象最初具有构造函数属性。因为原型对象本身就是一个对象,所以我们经常使用来确定它的构造函数prototype_object.constructor。但是现在本身prototype_object已经有了一个constructor属性,它指向与原型关联的构造函数。在这种情况下,继承怎么可能存在?