声明具有类似属性的JavaScript对象的最佳实践

时间:2014-07-22 15:47:05

标签: javascript oop design-patterns structure prototype

对于客户端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() {}

我看到的直接差异是在第一个示例中测验/调查是对象,而在第二个测验中是原型。每个页面都有这些项目的单例,所以在每个测验实例上都有一个方法(只有一个)对我来说似乎并不坏。

哪个是首选,为什么? (或者我错过了任何更好的实例化对象的方法)。

1 个答案:

答案 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