问题标签 [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.
inheritance - node.js 和浏览器(包括 IE6)的标准继承系统?
我正在寻找一个可以在 node.js 和浏览器中工作的标准继承系统。
sys.inherits 在旧浏览器(Object.create)中不起作用。
所有 js 库(jquery、extjs、dojo...)都有相似但不同的继承系统。(不知道哪个对node.js好)
想使用一个简单的并且将来可能成为“标准”的(至少在基于 node.js 的系统中)。
任何的想法?你用的是哪一个?
还发现了一些有趣的项目:
http://howtonode.org/prototypical-inheritance(不适合 IE)
http://jsclass.jcoglan.com/modules.html(太大,太红宝石?)
顺便说一句,我在前端使用 require.js。
谢谢
actionscript-3 - 是否可以在 AS3 中的匿名函数上使用“get”和“set”?
我试过了,但可能语法错误:
我得到“1084:语法错误:在获取之前需要左括号。”
我的印象是这个关键字只用于类,即它不适用于 AS3 的底层原型性质。
注意给出的示例在类方法中,而不是在时间线框架脚本中,所以请不要引用我的 livedocs。
javascript - 什么时候应该使用自己的命名空间,什么时候应该扩展原生 js 对象?
我正在重构我的代码。我无法决定如何准确地实现我拥有的几个实用功能。 具体来说,如果某些功能在我的个人命名空间中更好,或者直接扩展 js 对象。
扩展原生 JavaScript 对象的示例
(这是正确的术语吗?)。
使用我自己的命名空间的示例
需要考虑的问题
- 何时将实用程序合理地插入到原生 JavaScript 对象中?
- 如何判断实用程序何时最好位于我自己的命名空间中?
javascript - 动态附加一个函数以授予对私有变量的访问权限
我正在尝试为我的对象动态分配回调,但在授予此函数访问私有变量的权限时,我似乎无法找到一种方法。我在下面列出了相关代码以及我遇到墙壁的注释。
对象工厂
模块
各种尝试
在这次尝试中,我尝试在模块对象中创建一个设置器......但无济于事。
我只是使用错误的 JavaScript 吗?我真的很希望能够在对象启动后分配回调。这可能吗?
prototypal-inheritance - CoffeeScript 类继承
我试图弄清楚咖啡脚本中的继承是如何工作的。这是我的代码的简化示例:
我需要在标记的行上放什么才能在[1]
这里使用正确的子类?这有效,但仅创建具有原型的对象ChildA
。我试过类似的东西:
...但这obj
在我的回调函数中未定义(TypeError:无法读取未定义的属性'foo'。
CoffeeScript 中有什么神奇的咒语能够创建一个类的新对象,其中类是可变的?
javascript - Python 中的原型编程
Javascript 对其对象使用基于原型的模型。尽管如此,该语言非常灵活,并且很容易编写几行函数来替代其他类型的构造。例如,可以创建一个class
函数,模拟标准的类行为,包括继承或私有成员。或者,可以通过编写一个函数来模拟函数式工具,例如,一个curry
函数将接受一个函数及其一些参数并返回部分应用的函数。
我想知道是否可以做相反的事情并在更经典的语言中模仿原型方法。特别是我一直在思考是否可以在 Python 中模仿原型,但是缺乏对匿名函数(比 lambda 更通用)的支持让我陷入了困境。
是否可以编写一些函数来模仿基于类的语言中的原型,特别是在 Python 中?
编辑让我举一些例子来说明如何实现这样的事情(但我并不能真正做到这一切)。
首先,最接近 Javascript 对象的是 Python 字典。所以我们可以有简单的对象,比如
当然我们要添加方法,只要方法适合 lambda,这不是问题
所以现在我们可以调用例如
现在,如果我们有任意函数作为方法,我们可以像这样继续。首先,我们需要内部的函数foo
可以访问foo
自身;否则它们只是普通函数而不是方法。
我想可以通过对 应用一个makeObject
函数来做到这一点,该函数foo
循环遍历foo
值,并且每当找到可调用的值时,都会修改其属性以作为其第一个参数__call__
传递。foo
在这个阶段,我们将拥有自立对象,无需创建类即可声明。
然后我们需要能够给出foo
一个原型,它可以作为makeObject
函数的第二个参数传递。该函数应修改如下:只要在foo.__getattr__
中foo.__setattr__
找不到该属性foo
,就应在 中搜索该属性foo.prototype
。
所以,我想我能够实现这一点,期待一件事:除了事先声明它们并将它们附加到我的对象之外,我想不出任何方法来声明比 lambdas 更复杂的方法。问题是缺少匿名函数。我在这里问是因为也许一些 Python 大师可以找到一些巧妙的方法来规避这个问题。
javascript - javascript从多个对象继承
我不太熟悉javascript继承,我试图让一个对象从另一个对象继承,并定义它自己的方法:
但是,第二个会覆盖第一个(FooB.prototype = new Foo() is cancelled out
)。有什么办法可以解决这个问题,还是我走错了方向?
在此先感谢,对于任何不好的术语,我们深表歉意。
javascript - 私有和特权方法与原型方法
在 JavaScript 中,我可以通过在构造函数中声明它们来创建私有和特权方法。通过这个,我必须将它们移出对象的原型。然后我失去了继承的可能性和一些性能,因为每个对象都将拥有这些方法的自己的副本,而不是访问一个原型对象。
所以我现在的问题是什么可能是一个petter模式:是否使用私有和特权方法。我不喜欢晃来晃去,所以我想避免这种情况。那么该怎么办?
你有什么经验?
javascript - JavaScript 扩展类型返回
我实际上正在研究 Crockford 的Javascript: the good parts。我是 JavaScript 新手,所以我很难理解这段代码是如何工作的:
这是我的想法:
作为一个方法(对象内部的函数),this
指向Function
对象,但是为什么需要返回对象,因为我可以从方法内部访问它?如果我是对的,this
是参考,而不是本地副本,所以:
也应该工作。
另一方面,在 JavaScript 中,没有 return 语句的函数返回undefined
并将其分配给Function.prototype.method
.
问题
回来有什么意义this
?
工作示例#1
输出:
-3 3
工作示例#2
输出:
-3 3
javascript - Javascript inheritance problem when using prototypes - instances overwritten :(
I'm new to JavaScript programming and I am having a bit of a nightmare with inheritance. I am writing some code for Appcelerator Titanium and I have a base class called Slide2D that I wish to inherit from.
So I have placed a few functions in Slide2D's prototype. These are generally not going to be overwritten, but will be called from classes derived from Slide2D. These functions will also be called from other parts of the program. There are also various eventhandlers used to manage animation in Titanium.
If I make a couple of these slides in some calling code (using new)
all of my prototype methods point to the last Slide2D created, regardless of whether I use s or t. So 'slide2' will always be displayed, even if I'm using the s variable.
This is driving me mad - any help would be greatly appreciated.
Sorry for the length of the code but here it is:
Edit
Thanks very much for your prompt reply. I have made the changes that you recommended and that has resolved that particular problem.
However, a new issue has been introduced.
I need to call Slide2D.prototype.getView from a derived class - ExtendedSlide2D.
However, now I get the following error :
This is where I add the button to the base class's view object.
I'm sure this error just comes down to my inexperience with the language but, once again, any help would be greatly appreciated.
Once again - here is the code for ExtendedSlide2D: