Javascript引用混乱

时间:2014-11-14 10:17:12

标签: javascript

该类被实例化并存储在变量中。变量的引用用于改变“prop”和“prop”。改变'。传递参考并存储在另一个变量中并注销。 Aaaaaaaaaannnndddd我不明白。

function ctrl () {

  function Klasse () {
      this.prop = 'prop';
  }

  var _klasse = new Klasse();

  return {
      get: function () {
          console.log('get', _klasse);
          return _klasse
      },
      change: function () {
          _klasse.prop = 'changed';
          console.log('change', _klasse);
      },
      reset : function () {
          _klasse = new Klasse();            
      }
  }
}

ctrl().change();
var _klasseReferenz = ctrl().get();

// Why is _klasseReferenz.prop !== 'changed' ????
console.log('referenz ', _klasseReferenz);

小提琴: http://jsfiddle.net/Lfg85x96/1/

4 个答案:

答案 0 :(得分:1)

因为每次调用ctrl时,都会创建新的Klasse实例。您应该将其更改为:

var ctrlInstance = new ctrl();
ctrlInstance.change();
var _klasseReferenz = ctrlInstance.get();

console.log('referenz ', _klasseReferenz);

请参阅fiddle

答案 1 :(得分:0)

每次调用ctrl()时,都会为该闭包创建一个_klass本地的新实例。您需要保存引用调用,并在其上调用get和update。

var reference = ctrl();
reference.change();
var _klasseReferenz = reference.get();

答案 2 :(得分:0)

CTRL()改变(); - >你只是单独调用函数(不保存参考调用)

var _klasseReferenz = ctrl()。get(); - >就像你在创建一个对象一样。

//为什么_klasseReferenz.prop!=='已更改'???? console.log('referenz',_klasseReferenz);

在第一行中,您只调用函数,并且没有引用,从第二行开始 你已经创建了一个对象并开始重新渲染它。

使用以下代码行来理解

var ctl = new ctrl();
ctl.change();
console.log('NowRefrenceWorking ', ctl.get());

答案 3 :(得分:0)

您正在创建ctrl函数的引用。 而不是ctrl()。change()和ctrl()。get()只是为变量分配一个新的ctrl实例

var _ctrl = new ctrl();
ctrl.change();
ctrl.get();