Javascript - 通用对象功能

时间:2018-02-19 00:10:04

标签: javascript function object methods

好的,我的问题是如何使用构造函数模式在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对象,那将允许像这样的实例,我很乐意听到这种模式。

1 个答案:

答案 0 :(得分:1)

您正在谈论这些&#34;数据集&#34;的方式,这对我来说是尖叫。

不要使用前缀或枚举属性来表明它们属于一起。使用适当的对象或数组。在这种情况下,类似this.objA = {value: 0, inc: 1, max: 10}

如果此函数始终对其中一个对象进行操作,并且似乎与ObjTest没有任何其他关系,那么它可能不是ObjTest的方法,而是这些对象的方法。对他们来说会更好。

&#13;
&#13;
//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;
&#13;
&#13;

您可以使用console.log(obj);,但在浏览器控制台中,这不会显示正确的&#34;之前&#34;州。这就是我在代码中使用JSON.stringify()的原因。