我有一个数据集和一些操纵该数据的函数。我希望将数据和函数存储在一个易读且易于使用的逻辑结构中,而不会违反良好实践。
我看到两个选项:
1。将数据定义为数组并将操作函数添加到数组中,这是可能的,因为数组是一种Object。
示例:
var dataSet = [1, 2, 3, 4];
var dataSet.add = function (newData) {
if (newData === badData) {
console.log('bad data!');
return;
}
dataSet.push(newData);
};
优点:更清洁,更易读,更易于使用
缺点:我们正在修改一个Array对象,这意味着它不会按预期运行,因此我们不应该尝试复制此对象,或者记录这样做的事实,即这样做会导致它失去它的功能。
2。定义一个新对象,并将数据定义为对象的属性以及所有操作函数。
示例:
var dataSet = {
data: [1, 2, 3, 4],
add: function (newData) {
if (newData === badData) {
console.log('bad data!');
return;
}
data.push(newData);
}
};
优点:对象按预期工作,可以轻松复制,并整齐地打包数据和功能。
缺点:只需调用' dataSet'即可将数据引用为对象的规范表示。在某些情况下,由于需要不断调用dataSet.data而不是仅调用dataSet,因此数据处理将变得冗长乏味。
这两个选项中哪一个最好,为什么?今天使用这些选项的一些例子是什么?
随意提供更好的选择。
编辑:
选项2a :(如果您有多个数据集,请使用原型)
选项3:根本不要将数据附加到功能上。而是为函数对象外部的数据创建一个单独的数组,并将所有数据函数放入它们自己的对象中。
谢谢!
答案 0 :(得分:1)
在我看来,第二个选项更好,因为正如你所说,修改原生对象是一种不好的做法。
实际上还有第三个选项,你可以创建一个LEFT
,它将获得本机数据结构并在其上公开方法。
通过这种方式,您将能够创建同一类的多个实例。
class
相同的实施,但使用ES5
class DataSet {
constructor(data) {
this.data = data;
}
add(newData) {
if (newData === badData) {
console.log('bad data!');
return;
}
data.push(newData);
}
}