【问题标题】:Variable not holding new value变量不保持新值
【发布时间】:2015-08-09 21:13:19
【问题描述】:

我正在使用 setter 为我的类中的变量赋予新值。但是,在设置该值并在另一种方法中使用后,该变量默认返回其原始值。

以下代码不是我项目中的实际代码......

var canContinue = false;

classXX.prototype.check = function() {

     if(canContinue){
          //do something
     }
}

classXX.prototype.init = function() {
   canContinue = false;
}

classXX.prototype.setCanContinue(val) {
   canContinue = val;  
}

return {
        getInstance: function() {
            _instance = new classXX();
            return _instance;
        }
    };

类实例化后 canContinue = true;如果我调用 classXX.setCanContinue(false) 那么检查函数仍然认为 canContinue 为 true。

我错过了什么吗?

【问题讨论】:

  • 请提供一个独立的可运行示例。 XX 班在哪里?
  • 为什么 canContinue 不是类变量? classXX.prototype.canContinue 将允许this.canContinue 分配和引用它。
  • setCanContinue 定义错误,为什么不使用实例(对象)属性而不是所有对象使用相同变量的类属性?
  • @Jesse:在 classXX.prototype 中放置一个可变变量会让人头疼。它要么是全局变量,要么是应该在构造函数中初始化的实例变量。
  • 这是一个非常小的并且不是当前类的 100% 准确的表示。

标签: javascript class encapsulation


【解决方案1】:

您可以执行以下操作,但 canContinue 变量将在所有实例之间共享。如果你想让它特定于每个实例,那么你应该在构造函数中声明它。

var classXXfactory = (function() {

  var canContinue = false;

  function classXX() {

  }

  classXX.prototype.check = function() {
    if (canContinue) {
      console.log('continue');
    }
  }

  classXX.prototype.init = function() {
    canContinue = false;
  }

  classXX.prototype.setCanContinue = function(val) {
    canContinue = val;
  }

  classXX.prototype.getCanContinueValue = function() {
    return canContinue;
  }

  return {
    getInstance: function() {
      _instance = new classXX();
      return _instance;
    }
  };

}());


console.log('############### First Instance');

var inst1 = classXXfactory.getInstance();

console.log(inst1.getCanContinueValue());
inst1.setCanContinue(true);
console.log(inst1.getCanContinueValue());

console.log('############### Second Instance');

var inst2 = classXXfactory.getInstance();

console.log(inst2.getCanContinueValue());
inst2.setCanContinue(true);
console.log(inst2.getCanContinueValue());

console.log('############### Setting value in second Instance');

inst2.setCanContinue("SETTGIN IN SECOND INST2");

console.log('############### Getting value from both Instances');
console.log(inst1.getCanContinueValue());
console.log(inst2.getCanContinueValue());

【讨论】:

  • 这对我不起作用,但它应该。不知道我的代码发生了什么。我会为良好的 OOP 设计投赞成票
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 2018-06-02
  • 1970-01-01
  • 2015-02-13
相关资源
最近更新 更多