VBScript:具有相同属性名称的Class内的函数可见性

时间:2011-03-04 11:43:18

标签: class oop object vbscript asp-classic

鉴于我们有一个脚本

Option Explicit

Class CClass
    Private m_date

    Private Sub Class_Initialize()
        m_date = CDate("1970-01-01 00:00:00")
    End Sub

    Public Function Foo()
        Dim d : d = Date()
        WScript.Echo "d is " & FormatDateTime(d, vbGeneralDate)
    End Function

    Public Property Get Date()
        Date = m_date
    End Property

    Public Property Let Date(p_date)
        m_date = CDate(p_date)
    End Property

End Class

Dim obj : Set obj = NEW CClass
Call obj.Foo()

类函数CClass.Foo()如何调用内置的VBScript函数Date()而没有属性CClass.Date干扰?

我目前的解决方案是引入一个可以调用的虚拟Date_()函数。但这似乎错了。我认为应该有一些方法来指定我们想要调用类范围之外的东西。

3 个答案:

答案 0 :(得分:3)

我几乎肯定没有办法在VBScript中做你要求的事。

但即使你可以想出办法来做到这一点,你真的不应该。您需要为自己的函数选择与内置函数名称不冲突的名称。对于像VBScript这样的动态脚本语言,其他任何东西都是完全无法维护的。

为您的Date媒体资源选择其他名称。优选更具描述性的:该属性返回的日期是什么?日期是指什么?怎么可能被使用?无论你做什么,都不要将它重命名为Date_ - 这不是更好。

答案 1 :(得分:1)

您可以在课堂内调用它,例如: Dim d : d = me.Date()

VBScript中的

Me与您在Javascript中使用This相同,例如

答案 2 :(得分:0)

参加聚会太晚了,但有一个使用eval功能的解决方案。 see eval function docs for details

Class CClass
    Private m_date

    Private Sub Class_Initialize()
        m_date = CDate("1970-01-01 00:00:00")
    End Sub

    Public Function Foo()
        Dim d : d = eval("Date()")
        WScript.Echo "d is " & FormatDateTime(d, vbGeneralDate)
    End Function

    Public Property Get Date()
        Date = m_date
    End Property

    Public Property Let Date(p_date)
        m_date = CDate(p_date)
    End Property

End Class

Dim obj : Set obj = NEW CClass
Call obj.Foo()