好的,我的问题是如何使用构造函数模式在Javascript对象内部设置泛型函数,该模式将对象实例的数据作为参数?
例如:
function ObjTest() = {
this.obA = 0;
this.obA_Inc = 1;
this.obA_Max = 10;
this.Up_Value = function(ob, obI, obM) {
if(ob <= obM) {
ob += obI;
if(ob > obM) {
ob = obM;
}
}
}
}
var obj = new ObjTest();
obj.Up_Value(obj.obA, obj.obA_Inc, obj.obA_Max)
如果有更好的方法来处理Javascript对象,那将允许像这样的实例,我很乐意听到这种模式。
答案 0 :(得分:1)
您正在谈论这些&#34;数据集&#34;的方式,这对我来说是尖叫。
不要使用前缀或枚举属性来表明它们属于一起。使用适当的对象或数组。在这种情况下,类似this.objA = {value: 0, inc: 1, max: 10}
。
如果此函数始终对其中一个对象进行操作,并且似乎与ObjTest
没有任何其他关系,那么它可能不是ObjTest
的方法,而是这些对象的方法。对他们来说会更好。
//So, as these objects have logic, let's use a class
class ValueObj {
constructor(value, inc, max) {
this.value = value;
this.inc = inc;
this.max = max;
}
Up_Value() {
this.value = Math.min(this.value + this.inc, this.max);
}
}
function ObjTest() {
this.objA = new ValueObj(0, 1, 10);
this.objB = new ValueObj(0, 2, 15);
}
var obj = new ObjTest();
//and since you call the method on the object itself,
//you don't need to pass anything to the function
console.log("before", JSON.stringify(obj,null,2));
obj.objA.Up_Value();
console.log("after", JSON.stringify(obj,null,2));
&#13;
.as-console-wrapper{top:0;max-height:100%!important}
&#13;
您可以使用console.log(obj);
,但在浏览器控制台中,这不会显示正确的&#34;之前&#34;州。这就是我在代码中使用JSON.stringify()
的原因。