【问题标题】:Javascript - Generic Object FunctionJavascript - 通用对象函数
【发布时间】:2018-02-19 00:10:03
【问题描述】:

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

【问题讨论】:

  • 如果它们已经在对象上,为什么要将它们作为参数? if (this.obA &lt; this.obA_Max)等。
  • 我第二个@Ryan,我正要写同样的……这没什么意义。
  • 旁注:ob = Math.min(ob + obI, obM) 总结了你函数中的逻辑
  • 我将在函数本身之外创建对象的实例。而且里面会有多条数据,不仅仅是obA,还有obB、obC等。我想要一个通用函数,我可以传递我正在为那个特定对象处理的数据集并执行相同的功能无需为每组数据全部写出。这只是一个简单的例子来说明我想要做什么。

标签: javascript function object methods


【解决方案1】:

你所说的这些“数据集”的方式,这对我来说是个大问题。

不要使用前缀或枚举属性来表示它们属于一起。使用适当的对象或数组。在这种情况下,类似于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));
.as-console-wrapper{top:0;max-height:100%!important}

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

【讨论】:

  • 好的,所以我尝试使用类,但它总是在第一个引号说“;”时给我一个错误预期的。我看过一些 JS 的课程教程,他们都说同样的话并给出同样的错误......我错过了什么?
  • @JoshC。去class - JavaScript | MDN学习吧
  • @JoshC。不,JS 没有那种类。这只是其原型继承模型(看起来更干净)之上的语法糖。我已将代码块更改为可运行的 sn-p。但是要告诉您为什么会出错,您必须发布引发此错误的代码。
  • 我收到错误的代码是:class obj { } 错误显示在第一个括号中,说明“;”预期的。即使我添加了构造函数或其他任何东西,它仍然会说明这一点。不过没关系,我只是把你说的转换成构造函数模式。现在一切正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 2012-10-04
  • 2011-08-22
相关资源
最近更新 更多