那为什么还不用var fs=this.constructor?

解决方案 »

  1.   

    因为要求这样也可行:
    alert(MyClass().r);
    alert(MyClass().r);
    alert(MyClass().r);
    alert(MyClass().r);
      

  2.   

    哈,不过利用this.constructor
    不过这个
    var fs=function(fs){return fs.caller};fs=fs(fs);
    写成:
    var fs=new function(){return this.constructor.caller}();
    也不错哦。
      

  3.   

    看过了你的上一篇文章,我很晕,使用js编写代码我想不可能用到模式,愿意是她并不是一种面向对象的语言,如你所见PROTOTYPE模式贯穿js,使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
    你所提及的SINGLETON模式,它是希望保证每个类只有一个实例,并且提供一个访问它的全局访问点。
    在js中,你所能做的无非就是对“函数”作协内联和宏之类的操作,我不知道js到底采用什么机制运行,但绝大多数操作极象是宏,但在功能上比宏强大,更像是内联。这让我想起了曾经有人提问js是否支持重载,那么你说js支持重载吗?当然不,我看也谈不上使用模式。我初学者!
      

  4.   

    js的toString()和valueOf()的覆盖是模拟重载的一种模式。
      

  5.   

    TO:Lostinet(迷失网络)
    重载是指允许多个同名的函数名存在,但通过不同的形参实现不同的操作,运算符重载特殊。最简单的例子:
    function go(){
     alert('null');
    }
    function go(a){
    alert('a='+a);
    }
    function go(a,b){
     alert('a='+a+'||b='+b);
    }
    试试看,js允许这样写执行的永远是最后一次定义的函数,后进先出,没有关于js的比较好的书籍找到关于js的更具体的解释(至少没有提到重载问题),你所说的我觉得只是宏,另外js和vbs都提供了函数内联,查一下MSDN,可以找到,我认为不是重载
      

  6.   

    <script>
    function go(){
     var s=97,arr=[];
     for(i=0;i<arguments.length;i++)
       arr[i]=String.fromCharCode(s+i)+"="+arguments[i];
     alert(arr.join("||"))
    }
    go(1,2,3,4)
    </script>
      

  7.   

    js的toString()和valueOf()的覆盖是模拟[运算符号]重载的一种模式。
      

  8.   

    尊敬的秋水姐:
    你举的例子是想说明js不支持重载队吗?我是这么理解的,js的参数表“数组对象“被引用,当我想事实上不是这么调用的,arguments对象只是Array树组对象的得属性,由于存在这个属性与重载机制矛盾,至少解释器没有根据参数表来选择用那个函数匹配。
    致 Lostinet(迷失网络):
      首先我觉得你再这里使用模式这个词不太合适,模式一般值设计模式,基本模式如下列:
     创建型:
       Abstract Factory
       Builder
       Prototype
       Singleton
     结构型:
       Adapter
       Bridge
       Composite
       Decorator
       Facorator
       Flyweight
       Proxy
      行为型:
       Chain of Responsibility
       Command
       Iterator
       Mediator
       Memento
       Observer
       State
       Strategy
       Visitor
    以上模式适用范围:对象。
    但愿没有遗漏。
      js基于Prototype模式,也就是你所创建的任何对象均为某个对象的副本,比如myarray=new Array;myarray为Array对象的副本,所有原型已经存在,而你不能重载,如果说覆盖那么它是一种[宏]而已,也就是简单的字符串替代,应该就是你说的模拟的意思。js解释执行特点决定[宏]不会具有编译执行中[宏]盲目替代的缺点。
      由于js没有类,所以不可能提供[运算符重载],否则建引起混乱。
      自家理解,我不想误人,毕竟我是js初学者,我只是觉得感兴趣,讨论一下,我想搞明白这个。