[英]JavaScript object setting values to object but not updating to firebase
[英]Setting object values in JavaScript
我已尽力解决这个问题,现在我被卡住了,为什么第四个警报返回未定义?
function buttonClick()
{
var myTest = function()
{
var _setDirectlyInside = "So far so good...";
var _setInFunctionCalledInside;
var _setInFunctionCalledFromOutside;
(function(){
_setInFunctionCalledInside = "This would indicate scope isn't the problem?";
})();
return {
basic : "Easy stuff",
setDirectlyInside : _setDirectlyInside,
setInFunctionCalledInside : _setInFunctionCalledInside,
functionCallFromOutside : function(){
_setInFunctionCalledFromOutside = "Why does this come back as undefined?";
},
setInFunctionCalledFromOutside : _setInFunctionCalledFromOutside
}
};
var test = myTest();
alert(test.basic); // Returns "Easy stuff"
alert(test.setDirectlyInside); // Returns "So far so good..."
alert(test.setInFunctionCalledInside); // Returns "This would indicate scope isn't the problem?"
test.functionCallFromOutside();
alert(test.setInFunctionCalledFromOutside); // Broken, returns undefined
}
解析度:
setInFunctionCalledFromOutside : _setInFunctionCalledFromOutside, // Won't work
setInFunctionCalledFromOutsideGetter : function(){
return _setInFunctionCalledFromOutside; // Will work
}
...
alert(test.setInFunctionCalledFromOutside); // Broken, returns undefined
alert(test.setInFunctionCalledFromOutsideGetter()); // Now works
这个:
return {
basic : "Easy stuff",
setDirectlyInside : _setDirectlyInside,
setInFunctionCalledInside : _setInFunctionCalledInside,
functionCallFromOutside : function(){
_setInFunctionCalledFromOutside = "Why does this come back as undefined?";
},
setInFunctionCalledFromOutside : _setInFunctionCalledFromOutside
}
......不会造成setInFunctionCalledFromOutside
总是返回相同的值_setInFunctionCalledFromOutside
。 相反, _setInFunctionCalledFromOutside
将在return
语句执行时进行计算,其值将放在setInFunctionCalledFromOutside
。 因此, functionCallFromOutside()
对setInFunctionCalledFromOutside
没有影响。
@nnnnnn 说得最好 ,但他删除了他的回答。 setInFunctionCalledFromOutside
不是指向 _setInFunctionCalledFromOutside
的指针 。 在创建返回的对象时,为setInFunctionCalledFromOutside
分配了_setInFunctionCalledFromOutside
具有的值。 由于尚未分配任何值,因此值undefined
。 更改一个的值,不会更改另一个的值。
一个更简单的例子说明了同样的原则:
var i = 0;
var n = i;
i++;
alert(i); // 1
alert(n); // still 0
要添加到其他人 - 供参考,JS按值传递字符串和数字。 它通过引用传递/分配对象,数组和函数。
这不是你要击中的障碍(因为你的内部变量在你将它分配给你的外部变量时是undefined
的),但即使你确实修复了第一部分:
var internal = "string";
return {
external : internal,
setInternal : function (val) { internal = val; }
};
这仍然无法解决问题,因为obj.external
将永远是“字符串”。
为什么?
因为在赋值时将external
设置为与internal
相同的值,并且不等于internal
的reference
(即:指向它的指针)。
如果您正在寻找指针,那么将internal
一个对象:
var internal = { string : "my string" };
return {
external : internal,
setInternal : function (val) { internal.string = val; }
};
obj.external.string; // "my string"
obj.setInternal("Bob was here");
obj.external.string; // "bob was here"
它为什么现在有用?
因为internal是一个对象,当你分配external
的值时,你给它一个指向internal
也有一个指针的对象的指针。
当你更改internal
的属性时,比如internal.string
,因为external
指向同一个对象, external.string
具有相同的值。
如果你将internal
设置为完全不同的东西,那么你将internal
指向别的东西(比如internal = null;
),因此当你修改internal
时, external
将不再改变,因为internal
不再指向它使用的对象成为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.