![]() |
1
5
我建议使用以下模式
方法驻留在原型中是很重要的(因为性能原因,这无论如何都应该如此),因此可以通过调用超类的方法
与一些 syntactic sugar ,您可以使JS看起来像一种基于类的经典语言:
|
![]() |
2
4
道格拉斯·克罗克福德在这两方面都有很好的文章 classical 和 prototypal 在javascript中继承,这应该是很好的起点。 |
![]() |
3
1
好的,在javascript中复制类/实例样式系统的诀窍是您只能对实例使用原型继承。因此,您需要能够创建一个只用于继承的__non-instance_实例,并且让一个初始化器方法与构造函数本身分离。 这是我使用的最小系统(在添加虚饰之前),将一个特殊的一次性值传递给构造函数,让它在不初始化对象的情况下构造一个对象:
使用
用法相对简单,通常与Python样式的对象类似,只是语法稍显笨拙:
猴子修补一个内置的(功能)是有点可疑的,但它让人读起来很愉快,而且没有人愿意这样做。
|
![]() |
4
1
我在研究这个问题时发现的最常见的模式是 Mozilla Developer Network . 我更新了他们的示例,以包含对超类方法的调用,并在警报消息中显示日志:
|
![]() |
5
0
你可以使用Crockford在他的书“javascript的好部分”中提出的功能模式。其思想是使用closare创建私有字段,并使用previleged函数访问这些字段。以下是满足您6项要求的解决方案之一:
|
![]() |
6
-1
克罗克福德也启发了我,但我对他使用“构造函数函数”所说的“功能继承”有很好的经验。YMMV。
更新
:对不起,我忘了:您仍然需要用
|
![]() |
Brendan · Java中从父类继承的对象的ArrayList 2 年前 |
![]() |
Tali · 继承-您应该使用基类,还是它们只是子类的框架? 2 年前 |
![]() |
mask2 · 如何轻松访问继承类的功能? 3 年前 |
![]() |
Dimon · 父类中的Setter,以及一些没有参数的子类 3 年前 |
![]() |
Miguerurso · Javascript类继承无法正常工作 3 年前 |
![]() |
GuessMe · 返回新类对象的正确方法(也可以扩展) 3 年前 |
![]() |
Daniel Lizik · 重写父类构造函数的子类成员初始值设定项 3 年前 |
![]() |
i_know_what · 以基类作为参数重写错误的方法 3 年前 |