类被实例化并存储在变量中。变量的引用用于将"prop"更改为"change"。引用被传递并存储在另一个变量中并注销。啊
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/
因为每次调用ctrl
时,它都会创建新的Klasse
实例。您应该将其更改为:
var ctrlInstance = new ctrl();
ctrlInstance.change();
var _klasseReferenz = ctrlInstance.get();
console.log('referenz ', _klasseReferenz);
见小提琴
每次调用ctrl()
时,您都会创建一个_klass
该闭包本地的新实例。您需要保存引用调用,并调用 get 并在此基础上进行更新。
var reference = ctrl();
reference.change();
var _klasseReferenz = reference.get();
ctrl().change(); -->你只是单独调用函数(不保存引用调用)
var _klasseReferenz = ctrl().get(); --> 这就像你正在创建一个对象一样。
为什么 _klasseReferenz.prop !== "更改"????console.log('referenz ', _klasseReferenz);
在第一行中,您只调用函数,没有引用,从第二行开始接下来,您已经创建了一个对象并开始引用它。
使用以下代码行来理解
var ctl = new ctrl();
ctl.change();
console.log('NowRefrenceWorking ', ctl.get());
您正在创建对 ctrl 函数的引用。而不是ctrl().change()和ctrl().get()只需为变量分配一个新的ctrl实例
var _ctrl = new ctrl();
ctrl.change();
ctrl.get();