【发布时间】:2011-11-20 04:57:04
【问题描述】:
谁能解释一下,为什么我可以通过在本地设置它的值来覆盖全局实例的方法值,以及为什么我不能对变量做类似的事情?
访问变量的唯一方法是使用window 对象层次结构吗?或者有没有更短的方法?
(function() {
console.log(this);
var someVar = this.someVar = false;
var subClass = new Class({
test: false,
setValue: function(value) {
this.test = value
}
});
var subPub = this.subPub = new subClass();
var MainClass = new Class({
rewriteVar: function() {
console.log("someVar = " + someVar); // returns global value
console.log("subPub.test = " + subPub.test); // returns global value
someVar = true;
console.log("someVar local: " + someVar); // returns new local value
console.log("someVar global: " + window.someVar); // returns old global value
subPub.setValue(true);
console.log("subPub.test local: " + subPub.test); // returns new local value
console.log("subPub.test global: " + window.subPub.test) // returns new global value
}
});
/* var someObj = this.someObj = {};
var someVar = someObj.someMeth = false;
// And why is this possible?
var MainClass = new Class({
rewriteVar: function() {
someObj.someMeth = true;
console.log(window.someObj.someMeth); // returns new global value
}
}); */
window.addEvent("load", function() {
var test = new MainClass();
test.rewriteVar()
})
})()
【问题讨论】:
-
在一种情况下,您正在更改保存原始值的变量,在另一种情况下更改对象的属性。原始值都是不可变的。
标签: javascript class object mootools scope