有人能用对象解释奇怪的JavaScript吗
Can someone explain odd JavaScript with objects?
我有以下类
function Temp() {
var isHot=false;
return {
setHot: function(v) { isHot=v },
getHot: function() { return isHot; },
hot: isHot
}
}
var w = new Temp();
w.setHot(true);
w.hot !== w.getHot()
如果我通过函数访问w对象,为什么我只看到更改后的值?
创建对象时,返回对象的属性"hot"已初始化,但其值是"isHot"值的副本。对本地(闭包(变量"isHot"的后续更改不会影响"hot"属性;变量和对象属性根本不是这样工作的。
JavaScript没有提供将变量或对象属性作为另一个变量或对象的别名的方法。然而,可以做的是返回一个更花哨的对象:
function Temp() {
var isHot=false;
return {
setHot: function(v) { isHot=v },
getHot: function() { return isHot; },
get hot() { return isHot; }
}
}
这将创建"hot"属性作为ES6getter函数。对"hot"属性的引用现在会导致调用这个小函数,因此该属性将提供一种检索"isHot"当前值副本的方法。(这在旧的JavaScript环境中不起作用。(
因为hot
被设置为执行Temp
时isHot
的值。因为isHot
是基元,所以w.hot
的值是isHot
的副本,而不是对当前值的引用是isHot
同样值得指出的是,如果您计划创建Temp
的多个实例,则使用这种模式非常糟糕,因为isHot
是Temp
的局部变量,而不是从new Temp()
创建的对象的实例变量
var x1 = new Temp();
var x2 = new Temp();
x2.setHot(false);
x1.setHot(true);
x1.getHot() === true; //will return true
function Temp() {
return {
setHot: function(v) { this.hot=v },
getHot: function() { return this.hot; },
hot: false
}
}
var w = new Temp();
w.setHot(true);
w.hot !== w.getHot()
我相信,这就是你需要做的事情。根本不需要isHot var。然后,get-set方法直接编辑对象的hot值,这意味着getHot((和w.hot都将返回正确的值。
如果你想让isHot值私有,那么我相信你需要使用isHot var,但你根本不需要或引用w.hot值。不确定这样的行动会产生什么后果。
function Temp() {
var isHot = false;
return {
setHot: function(v) { isHot=v },
getHot: function() { return isHot; }
}
}
var w = new Temp();
w.setHot(true);
w.getHot();
However you can not access w.isHot, essentially private var.
相关文章也许。。
- 在Javascript中实现私有实例变量
上面的答案解释了您处理源变量的副本。如果您只使用get/set函数来获取或设置闭包中的变量值,并将isHot
保留为私有变量,这将是一个很好的基调:
function Temp() {
var isHot=false;
return {
setHot: function(v) { isHot=v },
getHot: function() { return isHot; }
}
}
var w = new Temp();
w.setHot(true);
w.getHot(); // always returns the right value
相关文章:
- 你能解释一下为什么这个javascript不正确吗
- Javascript 如何强制 string.replace 不将我的字符串解释为正则表达式
- Appcelerator Titanium:在运行时下载并解释JavaScript代码
- 无法解释的JavaScript行为-错误
- 请为javascript解释MVC中的VC
- 解释javascript中的+var和-var一元运算符
- 需要解释Javascript regex请求参数解析
- 解释 JavaScript 中数字的行为
- 你能用javascript解释对象和数组运算吗
- 有人可以用javascript解释以下代码吗?它用于读取文本文件,但我不知道XML和AJAX的东西
- Javascript解释 - 语法/格式/风格对我来说是新的
- 有人能用Javascript解释这种奇怪的行为吗
- 有人能用Javascript解释一下这个语法吗;type=type||'fx'&”;
- 最大数字(javascript)解释
- 用JavaScript解释用户输入的日期
- 需要涉及函数的快速JavaScript解释
- 当年份为yy格式时,我如何用Javascript解释正确的日期
- 是JavaScript解释还是JIT编译
- 有人能用JavaScript解释一下这个函数吗?
- 是否有一种方法可以使用命令行工具来查看网页的JavaScript解释源