这是我之前的查询的后续。从那以后我一直在尝试一些代码:
var myFunc = function(){
this.int1=1;
var int2=2;
};
myFunc.int1=3;
myFunc.int3=4;
for(var name in myFunc){
console.log('myFunc...'+name+'='+myFunc[name]);
};
var myFuncImpl = new myFunc();
myFuncImpl.int1=5;
for(var name in myFuncImpl){
console.log('myFuncImpl...'+name+'='+myFuncImpl[name]);
};
我得到的输出为:
myFunc...int1=3
myFunc...int3=4
myFuncImpl...int1=5
我无法回答以下问题:
为什么int2作为 myFunc 的属性不可见?它仍然在 myFunc 的范围内,对吧?这个定义在哪里消失了?
为什么我能够在函数范围之外覆盖int1的值?如果有人不小心删除了我在代码之外的值怎么办?对于“对象”,我理解“Object.freeze()”可以帮助解决 myFuncImpl - 但是像 myFunc 这样的函数定义呢?
为什么我不能从 myFuncImpl 访问int3?先前的定义(在定义 myFunc 时)去哪儿了?
我想我的怀疑是由于我认为 myFunc 作为一个“类”(如在 Java 中)和 myFuncImpl 作为一个对象。也许我走得太远了?
谢谢 !