zoukankan      html  css  js  c++  java
  • 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
    
    机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
  • 相关阅读:
    Max Sum Plus Plus_DP
    Prime Ring Problem_DFS
    Swaps in Permutation _并查集 + 优先队列
    Roadblocks_次短路
    Reward_toposort
    确定比赛名次_toposort
    Zipper_DFS
    Chopsticks_DP
    搬寝室_DP
    Passing the Message_单调栈
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/2970271.html
Copyright © 2011-2022 走看看