新手查询动态添加属性
Newbie query on dynamic addition of properties
这是我上一次查询的后续操作。从那以后,我一直在尝试一些代码:
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是一个对象。也许我走得太远了?
谢谢!
-
int2
实际上是一个私有变量,因此函数外的代码无法检测到它http://javascript.crockford.com/private.html -
这只是"香草"JS生活中的一个事实。如果需要防止覆盖值,请使用
Object.defineProperty
实现。IE的注意事项<9 -
int3
是函数的"静态"属性。它在实例上不可用,有点像C#中的方法。如果你有一个静态方法,它对类的实例不可用。这里的区别在于,您可以稍后在代码中说myFunc.int1 = "asdf";
,现在您的"static"属性已经更改。不要将静态与常量混淆http://elegantcode.com/2011/01/19/basic-javascript-part-7-static-properties-and-methods/
相关文章:
- 选中单选框时将属性添加到输入字段
- 将css属性添加到对象的集合中
- 用javascript向数组(?)中的特定属性添加值
- AngularJs,在没有隔离的情况下将指令属性添加到作用域
- 如何将enctype属性添加到FormData()对象中
- 如何将属性添加到自定义角度指令
- 如何将额外的属性添加到bootstrapTable中
- 在 Javascript 生成的列表中,如何将自定义属性添加到 标记
- 将动态属性添加到对象末尾
- 向 JSON 对象属性添加引号
- 将地理 JSON 要素属性添加到地图框弹出窗口
- 是否有脚本/代码可以一次将链接属性添加到多个链接
- 将自定义属性添加到 vuejs 组件
- 将属性添加到带有href链接但没有#的元素
- 将属性添加到数组中的所有对象
- Jquery将data-rel属性添加到所有输入字段,并移除name属性
- 将属性添加到窗元素时是否引发事件
- 将onsubmit属性添加到表单并提交
- 将属性添加到数组中的每个对象
- 如何使用jQuery向属性添加值