我发现vbscript类成员变量可以被外部常量值替换。
示例VBScript
代码:
''' save as test.vbs file
Class Person
Private name
Public Sub hi
name= "inner_name"
msgbox name 'will be "outer_name"
End Sub
End Class
set p = new Person
p.hi
Const name = "outer_name"
您可以在 vbs 文件或经典 asp 文件中运行此代码。
将代码保存到test.vbs
中,然后双击运行它。
您将看到“outer_name”。
为什么不“inner_name”?
根据我的理解,类私有(private)成员变量不应该受到外部代码的影响。
可以修复吗?
最后这是我的解决方法:
- 将
Sub
或Function
与()
结合使用 - 将
Public
与Me.XX
结合使用
Class Person
Public Function name()
name= "inner_name"
End Function
Public Sub hi
msgbox name 'will be "outer_name"
msgbox name() 'will be "inner_name"
msgbox me.name 'will be "inner_name"
msgbox me.name() 'will be "inner_name"
End Sub
End Class
set p = new Person
p.hi
Const name = "outer_name"
最佳答案
您创建一个在运行时可用的全局常量(无法更改)。该常量将胜过您的类私有(private)成员(因为它们具有相同的名称),因为编译器不知道其中的区别。
建议对全局常量使用一组命名约定以避免冲突。
有用的链接
关于VBScript 类成员变量被外部常量覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75986906/