VBScript构造函数与Default关键字

VBScript真是一门很笨拙的语句,End就End,还要说明是End,与同样使用end收尾的ruby霄壤之别!

Class User
   private [_name]
   Public Property Let name(neo) 
      [_name] = neo
   End Property

   Public Property Get name()
      '没有return 语句, 用“属性名 + 等号+ 值”实现
      name = "我的名字叫 " & [_name] 
   End Property
End Class

Dim a 
Set a = New User
a.name = "司徒正美"
MsgBox(a.name)

看JS相同的实现


function User(name){
  var _name = name;
  this.__defineSetter__("name", function(val){
     _name = val;
  })
  this.__defineGetter__("name", function(){
     return "我的名字叫做 "+_name;
  })
}
var user = new User("司徒正美");
alert(user.name)

//或者
function Field(val){
    this.value = val;
}
 
Field.prototype = {
    get value(){
        return this._value +"!!";
    },
    set value(val){
        this._value = val;
    }
};

var field = new Field("nick");
alert(field.value)

VBScript没有构造器的概念,但它有个奇怪的Default语句,一个类只允许一个。当类实例化后,它能直接像函数一直调用。


Class MyClass 
    Public Default Function SayHello(name) '神奇的Default语句
      SayHello = "Hello, " & name 
    End Function 
End Class 
Set o = New MyClass 
MsgBox o("demon") '像函数一样调用实例,它明明应该是一个对象

所有VBScript类都自动支持两个事件:Class_Initialize与Class_Terminate,用于初始化与被销毁时


Class TestClass 
    ' Setup Initialize event. 
    Private Sub Class_Initialize 
       MsgBox("初始化") 
    End Sub 
    ' Setup Terminate event. 
    Private Sub Class_Terminate 
      MsgBox("被销毁") 
    End Sub 
End Class 
' Create an instance of TestClass. 
Set X = New TestClass 
' Destroy the instance. 
Set X = Nothing 

有了 Default 关键字之后,我们可以模拟实现构造函数的功能:


Class Rectangle
    Private height, width
	'构造器
    Public Default Function Construtor(h, w)
        height = h : width = w
        Set Construtor = Me
    End Function
	' 方法
    Public Property Get Area
        Area = height * width
    End Property
End Class
'看起来是不是很像构造函数呢
Set r = (New Rectangle)(6, 8)
MsgBox r.Area

你可能感兴趣的:(VBScript)