对于客户端JS应用程序,我需要创建测验和调查。这些对象的域逻辑非常相似,所以我希望它们都从一个UserInput对象继承,而每个对象都有很少的附加方法。
我关注这样做的最佳实践方法。我正在思考我可以创建一个充当原型的UserInput构造函数,然后动态地向Quizzes和Surveys添加方法。
例如:
function UserInput() {}
UserObject.prototype.sharedMethod = function() {}
Quiz = new UserInput();
Quiz.sharedMethod()
Quiz.quizMethod = function() {}
Survey = new UserInput();
Survey.surveyMethod = function() {}
Survey.sharedMethod()
但是我想知道这不是简单的猴子修补,并且在JavaScript中实现类似的抽象类的想法会更清晰。
var Quiz = function() {
UserInput.apply(this, arguments)
}
Quiz.prototype = UserInput();
Quiz.prototype.constructor = quiz;
Quiz.prototype.quizMethod = function() {}
我看到的直接差异是在第一个示例中测验/调查是对象,而在第二个测验中是原型。每个页面都有这些项目的单例,所以在每个测验实例上都有一个方法(只有一个)对我来说似乎并不坏。
哪个是首选,为什么? (或者我错过了任何更好的实例化对象的方法)。
答案 0 :(得分:0)
我使用的是available on github,它对我来说非常适合使用简单熟悉的sytax。允许在javascript中使用OOP概念,包括类,继承,多继承,多态,接口(代码契约)和枚举器
以下是简单类继承的一个例子:
/* using ds.oop.min.js */
var a= ds.class({
type: 'a',
constructor: function (x) { this.x = x; },
mul: function (s) {
this.x *= s;
return this;
}
});
var b= ds.class({
type: 'b',
inherits: a,
constructor: function (x) { this.x = x; },
sub: function (s) {
this.x -= s;
return this;
}
});
var o = new b(5);
var output = o.mul(3).sub(5); // output = 10