我试图按如下方式编写VBScript:
FirstName="MyFN"
我设置Test2.FirstName
。为什么IsEmpty(Profile)
返回""?
问题是void header ( string $string [, bool $replace = true [, int $http_response_code ]] )
无效。
在VBScript中不存在检查对象的正确方法是什么?
答案 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
对象的引用放入变量Test1
和Test2
(而不是创建对象的副本)。因此,您对一个变量的属性所做的每个更改都将自动反映在其他变量中。
如果您不需要单例实例,只需使用常规工厂方法:
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"