如何在javascript中将变量传递给新对象?

如何在javascript中将变量传递给新对象?,javascript,constructor,abstract,Javascript,Constructor,Abstract,我希望实施: 但是,我希望能够进行动态调用: var milkshake = my_milkshakes[next]; var timer = new Tock({ this.callback: makeMoreMilkshakes(), // (Call version 2) this.interval: shakeTime, this.complete: bringThemToTheYard }); function bringThemTo

我希望实施:

但是,我希望能够进行动态调用:

var milkshake = my_milkshakes[next];  
var timer = new Tock({
      this.callback:  makeMoreMilkshakes(),  // (Call version 2)
      this.interval:  shakeTime,
      this.complete:  bringThemToTheYard 
});

function bringThemToTheYard(){


    return setNextCallbackFunction();
}
这里的问题似乎是我无法到达初始化范围之外。在Java中,我可以轻松地将参数传递给构造函数,除非需要函数句柄

我所说的抽象是指代码不能通过引用重用,但这是公认的松散术语

我的目标是初始化一个
new
timer调用来创建新的计时器。我需要5个不同的计时器。理想情况下,一个计时器就足够了,因为计时器是以线性时间启动和停止的

我的主要问题是无法将(例如)this.interval设置为动态变量
x
,因为我不知道如何将值传递给构造函数


我的实施基于以下文档中的:

var timer = new Tock({
  countdown: true,
  interval: 10,
  callback: someCallbackFunction,
  complete: someCompleteFunction
});

我不太确定你是否掌握了JavaScript,以及它与Java有多大的不同——它们并没有那么相似

这:

在JavaScript中不起作用。这是一个语法错误,因为不能在对象定义的左侧使用点符号(
)。看起来你可能想要这样的东西:

function Tock(config) {
    var defaultCallback = callbackFunction;
    var defaultInterval = 10;
    var defaultComplete = completeFunction;

    this.callback = config.callback || defaultCallback;
    this.interval = config.interval || defaultInterval;
    this.complete = config.complete || defaultComplete;

    /**
     * This could also be written as follows, I just wanted
     * to emphasize how many people write "defaults" in JS
    this.callback = config.callback || callbackFunction;
    this.interval = config.interval || 10;
    this.complete = config.complete || completeFunction;
    */

    // Go on doing stuff....
}

var timer = new Tock({
    callback: makeMoreMilkshakes(),
    interval: shakeTime,
    complete: bringThemToTheYard
});
此外,这条线看起来很近:

    callback: makeMoreMilkshakes(),
这是将
makeMoreMilkshakes
的结果分配给回调函数,而不是函数本身。如果这是有意的,那就别在意这一点。但我认为你想要:

    callback: makeMoreMilkshakes,

没有
()

我不太确定您是否掌握了JavaScript,以及它与Java有多大的不同-它们没有那么相似

这:

在JavaScript中不起作用。这是一个语法错误,因为不能在对象定义的左侧使用点符号(
)。看起来你可能想要这样的东西:

function Tock(config) {
    var defaultCallback = callbackFunction;
    var defaultInterval = 10;
    var defaultComplete = completeFunction;

    this.callback = config.callback || defaultCallback;
    this.interval = config.interval || defaultInterval;
    this.complete = config.complete || defaultComplete;

    /**
     * This could also be written as follows, I just wanted
     * to emphasize how many people write "defaults" in JS
    this.callback = config.callback || callbackFunction;
    this.interval = config.interval || 10;
    this.complete = config.complete || completeFunction;
    */

    // Go on doing stuff....
}

var timer = new Tock({
    callback: makeMoreMilkshakes(),
    interval: shakeTime,
    complete: bringThemToTheYard
});
此外,这条线看起来很近:

    callback: makeMoreMilkshakes(),
这是将
makeMoreMilkshakes
的结果分配给回调函数,而不是函数本身。如果这是有意的,那就别在意这一点。但我认为你想要:

    callback: makeMoreMilkshakes,

没有
()

我正在寻找的解决方案是:

function startNewTimer(type) {
  var timer = new Tock({});

  var options = null;

  switch (type){
    case "first":
      options.callback = function1;
      options.interval = interval1;
      options.complete = startNewTimer(second);
      break;
    case "second":
      options.callback = function2;
      options.interval = interval2;
      options.complete = startNewTimer(third);
      break;
    case "third":
      options.callback = function3;
      options.interval = interval3;
      options.complete = startNewTimer(fourth);
      break;
    case "fourth":
      options.callback = function4;
      options.interval = interval4;
      options.complete = startNewTimer(first); //Start over from function1
      break;
  }

  timer.callback = options.callback;
  timer.interval = options.interval;
  timer.complete = options.complete;

  timer.start(0);
  out("Starting timer: ".concat(timer.callback));
}

我正在寻找的解决方案是:

function startNewTimer(type) {
  var timer = new Tock({});

  var options = null;

  switch (type){
    case "first":
      options.callback = function1;
      options.interval = interval1;
      options.complete = startNewTimer(second);
      break;
    case "second":
      options.callback = function2;
      options.interval = interval2;
      options.complete = startNewTimer(third);
      break;
    case "third":
      options.callback = function3;
      options.interval = interval3;
      options.complete = startNewTimer(fourth);
      break;
    case "fourth":
      options.callback = function4;
      options.interval = interval4;
      options.complete = startNewTimer(first); //Start over from function1
      break;
  }

  timer.callback = options.callback;
  timer.interval = options.interval;
  timer.complete = options.complete;

  timer.start(0);
  out("Starting timer: ".concat(timer.callback));
}

1) Javascript没有“抽象构造器”的概念,不清楚这是什么意思。2)
this.callback
作为对象的键没有什么意义,那应该是什么?3) 不清楚您想要实现什么。“>我的目标是初始化使用一个新的计时器调用来创建新的计时器。“所以您需要一种工厂函数。”OOP中的“抽象”通常与“就地”有非常不同的含义;你最好避免使用这个词以减少混淆<代码>{this.callback:..}仍然是一个语法错误。我只想重申@deceze所说的,很难理解您的问题到底是什么。关于编辑:当您执行
new Tock({…})
时,您正在向构造函数传递一个值,即包含各种属性的对象文本。但是您的对象文本格式不正确,因为键只能是字符串文本,而不是
。Javascript没有“抽象构造函数”的概念,不清楚这是什么意思。2) 
this.callback
作为对象的键没有什么意义,那应该是什么?3) 不清楚您想要实现什么。“>我的目标是初始化使用一个新的计时器调用来创建新的计时器。“所以您需要一种工厂函数。”OOP中的“抽象”通常与“就地”有非常不同的含义;你最好避免使用这个词以减少混淆<代码>{this.callback:..}
仍然是一个语法错误。我只想重申@deceze所说的,很难理解您的问题到底是什么。关于编辑:当您执行
new Tock({…})
时,您正在向构造函数传递一个值,即包含各种属性的对象文本。但是您的对象文本格式不正确,因为键只能是字符串文本,而不能是
this.something