如何检查对象不存在?

时间:2016-12-11 04:24:09

标签: vbscript

我试图按如下方式编写VBScript:

FirstName="MyFN"

我设置Test2.FirstName。为什么IsEmpty(Profile)返回""?

问题是void header ( string $string [, bool $replace = true [, int $http_response_code ]] ) 无效。

在VBScript中不存在检查对象的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

在我看来,您希望构建某种factory函数,该函数将创建您的类的单例实例(如果已存在,则返回实例)。

每次调用函数Profile时,您当前拥有的代码都将创建一个新对象,因为IsEmpty(Profile)Profile解释为局部变量,该变量始终为空,因为此处指出它尚未在函数的上下文中初始化。 VBScript将该表达式中的Profile解释为变量也是一件好事,因为否则你会有一个无限递归,因为每个函数调用都会在它到达某个点之前再次调用它自己。它返回了一些东西。

能够建立一个"单身工厂"首先需要一个全局变量来保存单例对象。您还需要为变量和函数使用不同的名称。

Dim profile

Function GetProfile
    If IsEmpty(profile) Then
        Set profile = New objectProfile
    End If
    Set GetProfile = profile
End Function

通常是"单身工厂"但是,这是毫无意义的。如果您知道需要某个单例实例,只需在脚本开头创建一个全局实例,并在其余部分中使用该实例。

Set Profile = New objectProfile

Set Test1 = Profile
Test1.FirstName = "MyFN"
MsgBox Test1.FirstName

Set Test2 = Profile
Test2.Lastname = "MyLast"
MsgBox Test2.Lastname
MsgBox Test2.FirstName

上面将对原始Profile对象的引用放入变量Test1Test2(而不是创建对象的副本)。因此,您对一个变量的属性所做的每个更改都将自动反映在其他变量中。

如果您不需要单例实例,只需使用常规工厂方法:

Function CreateProfile(first, last)
    Set profile = New objectProfile
    If Not IsEmpty(first) Then profile.FirstName = first
    If Not IsEmpty(last) Then profile.LastName = last
    '...
    'further initialization/customization
    '...
    Set CreateProfile = profile
End Function

Set Test1 = CreateProfile("Joe", Empty)  'first instance (only first name)
Set Test2 = CreateProfile(Empty, "Bar")  'second instance (only last name)
Set Test3 = CreateProfile("Joe", "Bar")  'third instance (both)

或只是内联创建对象:

Set Test1 = New objectProfile  'first instance
Test1.FirstName = "MyFN"

Set Test2 = New objectProfile  'second instance
Test2.Lastname = "MyLast"