VBScript 类成员变量被外部常量覆盖

问题描述 投票:0回答:1

我发现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”

按照我的理解,类私有成员变量应该不受外部代码影响。

可以修复吗?


最后是我的解决方法:

  1. 使用
    Sub
    Function
    ()
  2. 使用
    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"

vbscript asp-classic
1个回答
1
投票

您创建了一个在运行时可用的全局常量(无法更改)。此常量将胜过您的类私有成员(因为它们具有相同的名称),因为编译器不知道其中的区别。

建议对全局常量使用集合命名约定以避免冲突。


有用的链接

© www.soinside.com 2019 - 2024. All rights reserved.