【发布时间】:2011-07-06 15:46:17
【问题描述】:
我的问题直接涉及 ActionScript 3,尽管它可能出现在其他语言中。
考虑在 AS3 中找到的全局 trace 函数。调用该方法不需要导入,并且可从所有类全局使用。
class A {
public function A() {
trace("Hello, A!"); // Hello, A!
}
}
现在,如果我创建自己的同名类方法会怎样?在 AS3 中,如果我有一个类方法 trace,然后在我的类中的其他地方调用 trace,则通过全局函数调用类方法。从本质上讲,我已经阻止了调用全局跟踪方法的能力。
class B {
public function B() {
trace("Hello, B!"); // no output
}
public function trace(s:String):void {
// do something else.
}
}
现在,我知道显而易见的答案是“不要创建名为 trace 的类方法。”但是如果我不知道全局 trace 函数的存在怎么办?或者,如果我想“覆盖”或“阻止”全局函数怎么办?编程就这么糟糕吗?或者这只是 AS3 是一种糟糕的面向对象语言的另一个例子?
【问题讨论】:
-
隐藏最常见的名字在任何语言中都是不好的。
标签: actionscript-3 function methods scope global