Mos*_*ted 14 javascript inheritance prototype
我在javascript中遇到了原型继承.
我想要实现的是方法概述,必须实现/定义何时继承.
我想知道这是否可能,如果可行,如何.
Mat*_*all 25
JavaScript真的没有这样的东西.正如您所说,JavaScript是面向原型的.
正如其他答案所说,当然,你可以模拟这个.但我看不出有这么好的理由.为什么面向对象的程序员使用接口和抽象类?Astraction和decoupling.这些允许你做各种好事,比如使用(作为参数)和生成(返回)具有抽象类型的值的写方法 - 至少满足关于其方法和字段的某些契约的对象.
反过来,我们得到其他"好东西",如类型安全的编译时检查.尝试将类型对象传递Foo
给只接受Bar
*类型对象的方法,然后您将收到编译器警告.
prototype
或constructor
创建后(读取:) new
,但您可以更改对象的属性.听起来你正试图将强类型,面向对象的语言的相对刚性强加到JavaScript的"轻松,顺其自然"的动态类型系统中.恕我直言,这不是一个好主意.也许你可以解释一下你想要解决的实际问题?
对不起,如果这是啰嗦,咆哮,或语无伦次.我确定那里至少有一种语言(OCaml?)完全抛弃了我的逻辑.给我一些反馈.
*当然,假设Foo
不是子类型Bar
.
† ...但仅限于运行时,因此它实际上不再是您使用JavaScript类型系统所获得的保证.
‡因此可能
Javascript不支持开箱即用,但很容易模拟所需的语义.如果你有一个想要抽象的基类'class',那就把它上面抽象的方法放在上面,让它们抛出一个错误.如果用户扩展了"类"并且未提供实现,则将引发错误.例如,你可以做到
function Thing() {...}
Thing.prototype.abstractMethod = function() {
throw 'You must implement abstractMethod';
}
Run Code Online (Sandbox Code Playgroud)