我正在重写一个JavaScript项目,并希望能够使用面向对象的方法来组织当前代码的混乱。主要问题是这个JavaScript应该作为小部件在第三方网站内运行,我不能让它与其他网站可能使用的JavaScript库发生冲突。
因此,我正在寻找一种在JavaScript中编写“类似”的继承方式,具有以下要求:
因此,我正在寻找一种在JavaScript中编写“类似”的继承方式,具有以下要求:
- 没有外部库或会与外部库冲突的内容(这排除了从外部库复制&粘贴的可能性)。
- 极简主义——我不希望支持代码超过几行,并且我不希望开发人员每次定义新类或方法时都需要大量样板代码。
- 应允许动态扩展父对象,以便子对象看到更改(原型)。
- 应允许构造函数链接。
- 应允许使用
super
类型调用。 - 仍然应该感觉像JavaScript。
function Shape(x,y) {
this.x = x;
this.y = y;
this.draw = function() {
throw new Error("Arbitrary shapes cannot be drawn");
}
}
function Square(x,y,side) {
this.x = x;
this.y = y;
this.side = side;
this.draw = function() {
gotoXY(this.x,this.y); lineTo(this.x+this.side, this.y); ...
}
}
Square.prototype = new Shape();
这解决了需求1、2和6,但它不允许超级调用(新函数覆盖父函数)、构造函数链接和动态扩展父类不会为子类提供新的方法。
欢迎提出任何建议。
this
是原型而不是draw
的this
。我可以做Square.prototype.draw.apply(this, arguments)
,但这很笨拙,而且我通常不喜欢方法通过名称调用它们的容器类(它们应该在任何地方使用this
)。 - Guss