问题标签 [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 回答
404 浏览

javascript - 如果原型继承提供了一切,为什么还要使用 Javascript 命名空间

使用以下构造,您可以拥有私有变量、公共和私有函数。那么为什么有各种不同的方法来创建命名空间呢?

NameSpace 是否与具有相关行为和范围的函数完全不同?

我看到了不污染全局命名空间的意义,例如浏览器中的窗口对象,它会创建过多的功能,但这也可以通过以下方式实现..

似乎我错过了一个基本点..

0 投票
3 回答
173 浏览

javascript - 继承对象

我读过Javascript的继承是原型的。这是什么意思?程序员定义的对象如何继承预定义对象的属性,例如window?例如,我需要在我自己的类中使用函数 eval() 。如何实现?

0 投票
2 回答
8154 浏览

javascript - 如何从 javascript 类型中删除方法

我有一些 javascript 运行在第 3 方的网站上,这需要我临时向 Array 类型添加一个函数,例如

我想成为一名优秀的开发人员,并且尽可能不污染其他人代码的类型系统,所以一旦不再需要该功能,我想再次删除该功能。这可能吗?

0 投票
2 回答
263 浏览

javascript - 通过 Javascript 原型继承重用代码

我对如何通过原型继承实现代码重用有点困惑。我正在关注http://alexsexton.com/?p=51上的示例,它创建了一个 Speaker 对象并将其与 jQuery 桥接。

假设我想要一个与示例类似的新扬声器,但现在有一个额外的声音文件。我能想到的唯一代码是:

但这种方法对我来说实际上听起来很“经典”。我通过Speaker.xxx.call. 我想我应该做差分继承,但不知道怎么做?有什么帮助吗?

0 投票
1 回答
147 浏览

javascript - 使用所有对象都可以使用的功能来增强 Object 对象

我增加 Object 的动机是我希望能够轻松处理旨在简单存储数据的对象(如 Java 中的“hashmap”)。我想轻松地做 hashmap.size()。

假设我的对象有一个名为 objData 的属性,当这样制作时它是空的:

我的对象有一些方法可以像这样向 objData 添加数据:

我的对象也有一些访问 objData 的方法:

当然,不存在这样的方法。这就是我增加 Object 对象的动机:

现在我应该能够做到:

或者:

但实际上,当我尝试加载与我编写的任何代码完全无关的页面时,我会遇到错误。我在谷歌地图 api 的 main.js 中遇到错误。巫毒教。

所以我改变我的扩充来扩充实际的 Object 而不是 Object.prototype:

现在我在 Firefox 中收到以下错误:

我在这里想念什么?

0 投票
2 回答
164 浏览

javascript - Javascript 和原型继承

Javascript 中的这两个语句有区别吗?

和这个?:

还有一件事,你为什么不能这样做:

太感谢了!

0 投票
5 回答
7945 浏览

javascript - 在不修改原型的情况下扩展核心类型

如何在不修改其原型的情况下扩展核心 JavaScript 类型(字符串、日期等)?例如,假设我想用一些方便的方法创建一个派生字符串类:

该错误似乎源于 String 基本方法,在这种情况下可能是“拆分”,因为它的方法正在应用于某些非字符串对象。但是如果我们不能将 应用于非字符串对象,那么我们真的可以自动重用它们吗?

[编辑]

显然我的尝试在很多方面都存在缺陷,但我认为这表明了我的意图。经过一番思考,我们似乎无法重用任何 String 原型对象的函数,除非在 String 上显式调用它们。

是否可以这样扩展核心类型?

0 投票
2 回答
228 浏览

javascript - Javascript - 原型继承问题和可能的一般理解问题

我开始学习 JavaScript,经过多年使用它却不知道发生了什么,我决定是时候做点什么了。此外,我在一个项目中工作,其中 JavaScript 可用于编写应用程序脚本。

所以,够了所有的 yada-yada,我的问题与原型继承有关,我我现在知道它是如何工作的,但可能存在问题。基本思想是每个对象(嗯,不是每个对象 - 是的 ;-))都有一个原型,如果实际对象在到达原型链的末端之前无法处理它,则所有请求都被委托给该原型(一个对象也可以有原型,对吧?)。

在我的应用程序中,将发生大规模过滤,我想为用户(技术性不是很强,应该尽可能简单)提供一种链接简单过滤器命令的方法,从而在每次额外调用时缩小结果集。我是什么意思?嗯。像这样:

zoo始终在范围内,是一个包含动物和动物园附加属性的对象。所以,我会有一个像这样的对象(让我们调用它Container)由示例中的所有方法调用返回:

到现在为止还挺好。但我也希望动物园成为一个容器。这是我真正的问题发挥作用的地方:由于动物园必须做一些非常昂贵的事情来检索起始动物集,我想延迟加载它们。当动物园收到getAnimals() 请求时,将获取数据。

我的想法是将动物园的原型设置为从动物园获取数据的容器。但是我找不到getAnimals()从原型(容器)访问动物园方法的方法。我试过了,this但找不到方法。

任何想法如何编写代码来做我想做的事?请注意,我不在浏览器环境中,我在我的应用程序中嵌入了 JavaScript (1.7)。

谢谢!

0 投票
2 回答
605 浏览

javascript - javascript中原型属性的用途是什么?

可能重复:
JavaScript .prototype 是如何工作的?

当即使没有属性也可以将属性添加到对象时,原型属性有什么用?

0 投票
3 回答
845 浏览

javascript - 为什么在 javascript 中使用链式原型继承?

性能

为什么我们要构建原型继承链而不是使用对象组合。通过原型查找链中的每一步都会变得很昂贵。

这是一些虚拟示例代码:

使用pd是因为属性描述符非常冗长。

o2.foo然后更快,o1.foo因为它只上升了两个原型链而不是三个。

既然沿着原型链向上移动是昂贵的,为什么我们要构造一个而不是使用对象组合呢?

另一个更好的例子是:

我没有看到任何代码合并原型对象以提高效率。我看到很多代码构建链式原型。为什么后者更受欢迎?

我能想到的唯一原因是Object.isPrototypeOf用于测试链中的单个原型。

除了isPrototypeOf使用继承而不是组合有明显的优势吗?