该类被实例化并存储在变量中。变量的引用用于改变“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);
答案 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();