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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值