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

标签 vbscript asp-classic

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

enter image description here

为什么不“inner_name”

根据我的理解,类私有(private)成员变量不应该受到外部代码的影响。

可以修复吗?


最后这是我的解决方法:

  1. SubFunction() 结合使用
  2. PublicMe.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/

相关文章:

vbscript - 检索 VBS 中 XML 属性的值

excel - 用于 ActiveWorkbook 的 VBA 到 VBS

sql - 选择对不同数据库服务器上的 2 个表进行查询

asp-classic - 使用 JavaScript 类 ASP - 处理缺少 Request.QueryString 中的查询参数的情况

vbscript - "Identity cannot be determined for newly inserted rows"在 ADO RecordSet AddNew 和 Update 之后

iis - 经典 asp application_OnEnd 和 session_OnEnd 事件不起作用

asp.net - 在包含经典 ASP 和 ASP.Net 1.1 代码的项目中管理连接字符串的最佳方法是什么?

go - 从 golang 应用程序发送字符串时出现意外的 StrComp 结果

vbscript - VBS FileSystem Object - FileExists,不仅仅是文件名的比较

excel - VBScript写入Excel不写入