Actionscript 3 在ActionScript3中,与;在;运营商和;“拥有自己的财产”;方法?
“in”操作符和“hasOwnProperty”方法看起来是可以互换的,但我想知道一个是否在检查继承属性或其他东西,另一个是否在检查继承属性或其他类似的东西。我特别感兴趣的是将它与词典一起使用,但我怀疑这与其他用法不同Actionscript 3 在ActionScript3中,与;在;运营商和;“拥有自己的财产”;方法?,actionscript-3,actionscript,Actionscript 3,Actionscript,“in”操作符和“hasOwnProperty”方法看起来是可以互换的,但我想知道一个是否在检查继承属性或其他东西,另一个是否在检查继承属性或其他类似的东西。我特别感兴趣的是将它与词典一起使用,但我怀疑这与其他用法不同 官方文档中描述了“hasOwnProperty”和“in”,但如果有区别,我觉得不太清楚。我知道的变化是in查找原型链,而hasOwnProperty没有,大多数AS3开发人员不使用原型,因此,这与日常使用并不完全相关。相信这个被精确接受的答案实际上给我带来了一点麻烦。似乎不仅仅
官方文档中描述了“hasOwnProperty”和“in”,但如果有区别,我觉得不太清楚。我知道的变化是
in
查找原型链,而hasOwnProperty
没有,大多数AS3开发人员不使用原型,因此,这与日常使用并不完全相关。相信这个被精确接受的答案实际上给我带来了一点麻烦。似乎不仅仅是原型相关的差异,还有更多的差异。我发现的是
当某个键是引用类型时,不能使用hasOwnProperty查看该键是否存在于字典中,但in运算符可以。
下面是一个要演示的示例
代码:
var测试:函数=函数(键:*,标签:字符串):无效
{
变量d:字典=新字典(true);
d[键]=真;
痕迹(标签);
跟踪(“hasOwnProperty:”+(d.hasOwnProperty(键)?“true”:"false,还有更多内容。hasOwnProperty不支持静态查找。例如,**静态属性**
-在对象的定义类或其任何超类中使用static关键字定义的变量、常量或方法;以及**原型属性**
-在已定义的原型对象上定义的属性对象原型链的一部分。`will返回false
。查看它的另一种方法是in
如果我访问ashasOwnProperty
不存在的属性或方法,它会告诉我它是否抛出错误,因为它不检查静态或原型属性或方法是否存在。
var test:Function = function(key:*,label:String):void
{
var d:Dictionary = new Dictionary(true);
d[key] = true;
trace(label);
trace(" hasOwnProperty: " + (d.hasOwnProperty(key)?"true":"false <== !!PROBLEM!!"));
trace(" in: " + (key in d));
trace(" []: " + d[key]);
};
test({}, "indexed by object");
test("string", "key is string");
test(0, "key is number");
test(true, "key is boolean");
indexed by object
hasOwnProperty: false <== !!PROBLEM!!
in: true
[]: true
key is string
hasOwnProperty: true
in: true
[]: true
key is number
hasOwnProperty: true
in: true
[]: true
key is boolean
hasOwnProperty: true
in: true
[]: true