问题标签 [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.
javascript - 在javascript中实例化一个对象真的只是以某种方式继承吗?
我正在阅读一本 JavaScript 书籍,并且在阅读有关继承的一章时,我想知道是否每次创建对象的实例时都会发生继承,尤其是因为它们是相似的。
示例:原型链接 -someObject.prototype = new someOtherObject();
实例化一个对象var myArray = new Array()
类似吧?
此外,这本书(面向 Web 开发人员的 JavaScript,作者:Nicholas Zakas)指出,实例和构造函数的原型之间存在链接。(该链接通常称为__proto__
)
那么有人可以说实例化一个对象就像继承吗?
javascript - 在 Backbone.js 中,如何让模型超类默认值充当子类的默认值?
我有一个定义一些默认值的类,以及一个定义一些默认值的子类。但是当我创建子类的实例时,它只查看本地默认值,而不会将其默认值与父类的默认值合并。是否有任何简单的方法可以做到这一点,而无需在initialize
每个子类的函数中显式地将本地默认值与父默认值合并?
这输出:
不是我想要的:
javascript - 如何在不指定模型名称的情况下从该模型的实例调用静态 Backbone.Model 函数?
我有我想从我的 Backbone.Model 对象的实例访问的静态属性。我知道我可以硬编码父构造函数来调用该方法,但这会阻止我使用多态静态函数。例如,我希望能够foo
在必要时覆盖函数ExtendedInventory
,而无需更改任何其他代码。
javascript - 我什么时候想在 JavaScript 中使用“类”(静态)方法或属性?
在 JavaScript 中,为什么要直接将属性附加到构造函数?
在查看 CoffeeScript 的辅助函数后,我得到了这个问题__extend
,其中包含以下内容:
它将属性/方法直接从构造函数对象复制到子类对象。但为什么会有人这样做呢?
谢谢!
javascript - 在 JavaScript (ES-5) 中创建原型链
我正在尝试创建一个使用原型链创建对象的函数,如下所示:
我想包装给定的原型以覆盖他们自己的查找链(以便可以重用它们),并希望以最少的复制/内部属性包装来做到这一点。
Javascript/ECMAScript 5 中是否有任何功能可用于覆盖对象上的所有属性访问?类似于__getattribute__(self, attrname)
Python 的东西?如果没有,我该怎么做?我是否被迫只克隆对象的属性(使用Object.hasOwnProperty()
)?
javascript - JavaScript 中的原型 OO
TL;博士:
我们是否需要原型 OO 中的工厂/构造函数?我们可以进行范式转换并完全放弃它们吗?
幕后故事:
最近我一直在玩弄用 JavaScript 做原型 OO,发现用 JavaScript 完成的 99% 的 OO 都在强制使用经典的 OO 模式。
我对原型 OO 的看法是它涉及两件事。方法(和静态数据)的静态原型和数据绑定。我们不需要工厂或构造函数。
在 JavaScript 中,这些是包含函数和Object.create
.
这意味着我们可以将所有内容建模为静态蓝图/原型和数据绑定抽象,最好直接连接到文档样式的数据库中。即对象从数据库中取出,并通过使用数据克隆原型来创建。这意味着没有构造函数逻辑,没有工厂,没有new
.
示例代码:
一个伪示例是:
小解释:
特定的代码很冗长,因为 ES5 很冗长。Entity
上面是一个蓝图/原型。任何带有数据的实际对象都将使用Object.create(Entity, {...})
.
实际数据(在本例中为组件)直接从 JSON 存储加载并直接注入到Object.create
调用中。当然,类似的模式也适用于创建组件,只有通过Object.hasOwnProperty
的属性才会存储在数据库中。
第一次创建实体时,它是用空的{}
实际问题:
现在我的实际问题是
- JS原型OO的开源例子?
- 这是一个好主意吗?
- 它是否符合原型 OOP 背后的想法和概念?
- 不使用任何构造函数/工厂函数会在某处咬我吗?我们真的可以不使用构造函数吗?使用上述方法是否有任何限制,我们需要工厂来克服它们。
javascript - (开源)JavaScript 原型 OO 示例
赏金编辑:
我正在寻找以纯原型 OO 范式(想想 Self)编写的代码。不是原型 OO 和经典 OO 的混合体。我不想看到通用的 OO 包装器,而只是简单地使用原型 OO 技术并且只使用原型 OO 技术。
参考相关问题:
在上面的问题中,我主要关注的是
可以这样写原型OO吗?
我们是否需要构造函数和初始化逻辑,有哪些替代方案?
新问题:
基本上在大型开源项目中是否有javascript 原型 OO 的好例子?
澄清:
我将不得不澄清原型 OO的含义:
- 没有课程。只有对象。
- 类概念的模拟为零,同样只有对象和克隆对象来创建新对象。
原型 OO 的进一步说明:
JavaScript 中的原型 OO 与经典 OO 仿真之间的区别是一个非常灰色的区域。这并不是说我重视避免经典的 OO。我想以学术方式自己学习原型 OO,而不学习经典 OO 仿真和原型 OO 的(可能更优化)组合。
这就是我“禁止”类的原因,只是为了让我能够以纯粹的方式看到这些技术并扩展我自己的 OO 工具包。
例子:
像 jQuery 这样的流行示例不符合第二个标准。对象是一jQuery
大类仿真。它专注于从类中创建新对象,而不是克隆现有对象。
如果我真的知道使用“纯”原型 OO 的任何示例,我会向您展示。我相信 99% 的 JavaScript OO 受经典仿真的影响太大。
奖励积分
如果
- 它的评论很好/记录在案
- 有单元测试
- 在github上。
我还将接受有关如何编写超出您琐碎的 hello world 应用程序的原型 OO 代码的文章/教程和示例。
javascript - 在闭包中使用原型模式
我一直在摆弄 Javascript 中的原型和闭包模式。您可能知道,使用闭包模式会降低性能,因为它为对象的每个实例重新定义了相同的函数。然而,闭包模式确实允许私有变量,这使得封装更容易。
这是原型模式的典型示例:
我在想,你为什么不能做这样的事情?
这允许在 foo() 函数中使用私有变量,您甚至可以在 foo() 函数中动态设置原型。
我做了一个jsperf.com 测试,它确实显示了性能上的很大差异,但我不知道为什么。
javascript - 数组默认没有原型吗?
我希望能够增加Array.prototype
方法,然后在任何数组上调用它们:
但似乎数组没有原型......?
我在这里错过了什么吗?
看来我的实际问题出在其他地方:调用[1, 2, 3].customMethod()
有效,但调用someDomElement.childNodes.customMethod()
失败。是childNodes
不是真正的数组?