我有以下课程
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()
Run Code Online (Sandbox Code Playgroud)
如果我通过函数访问w对象,为什么我只看到更改的值?
返回对象的属性"hot"在创建对象时初始化,但它的值是"isHot"值的副本.对local(closure)变量"isHot"的后续更改不会影响"hot"属性; 这根本不是变量和对象属性的工作方式.
JavaScript没有提供使变量或对象属性成为另一个的别名的方法.但是,你可以做的是返回一个更有趣的对象:
function Temp() {
var isHot=false;
return {
setHot: function(v) { isHot=v },
getHot: function() { return isHot; },
get hot() { return isHot; }
}
}
Run Code Online (Sandbox Code Playgroud)
这创造了作为ES6 getter功能的"热门"属性.对"hot"属性的引用现在导致调用很少的函数,因此该属性将提供一种方法来检索当前值"isHot"的副本.(这在较旧的JavaScript环境中不起作用.)
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()
Run Code Online (Sandbox Code Playgroud)
我相信,这就是您需要做的才能使其发挥作用。根本不需要 isHot 变量。然后 get set 方法直接编辑对象的热值,这意味着 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.
Run Code Online (Sandbox Code Playgroud)
相关文章也许..
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |