3

除了我在下面做的事情之外,还有其他方法可以在调用基函数并继承其构造函数的同时覆盖原型函数吗?

function MyFoo(name) {
    this.name = name;
}
MyFoo.prototype.sayName = function() {
    alert("Hi, my name is " + this.name + ".");
}

MyBar.constructor = MyFoo;
MyBar.prototype = new MyFoo();

function MyBar(name) {
    MyFoo.apply(this, arguments);
};

MyBar.prototype.sayName = function() {
    MyFoo.prototype.sayName.call(this);
    alert("It's nice to meet you!");
}

var fooJim = new MyFoo("Jim");
var barJake = new MyBar("Jake");

fooJim .sayName();
barJake .sayName();

这工作正常,但我只是好奇是否有更有效的方法来做到这一点。

4

1 回答 1

2

不,您模拟类继承的方法本质上是 JavaScript 语言所允许的极简主义。

如果您想在您的应用程序中大量使用类继承并希望最大限度地减少冗余代码,您可以:

  • 编写您自己的一组实用方法来操作“类”。
  • 或 google 搜索“javascript oop frameworks”以找到适合您需要的库。

我也忍不住建议这本书(希望它不会被视为垃圾邮件):Stoyan Stefanov 的“JavaScript Patterns”。它有一个非常好的章节,介绍了在 javascript 中模拟类继承的不同技术。

于 2012-11-16T22:25:37.997 回答