兔子专栏

刘晓逸(liuxiaoyi666)的小地盘

liuxiaoyi666
最近评论
coder_java:老师您好,我想请教如何在上传时验证服务器端文件是否已经存在,若存在弹出js提示是否覆盖,确定时,就覆盖已有的文件,取消就返回浏览状态,若有示例能否发到小弟email:pigdone@126.com, 谢谢!
loveblack123:好文
shada:很好
可惜要信赖一个庞大的msxml
有没有简单点的库呢
wellpie:兄弟,你这里有需要域名 空间,企业邮局 或者是服务器带宽租用的吗,我是厦门维派;
或者如果你有不少空间需求的话,可以考虑代理,搞点外快。
目前我们也在招收代理,
利润可以是4.5折 。
需要的朋友,可以直接联系我QQ 908267931
zj2610:www.belrion.com 贝尔中国

anyone of you bought any wow gold from www.belrion.com
or sold any gold to www.belrion.com.cn ? I was told they deliver and are good and fast
appreciate i……
文章分类
收藏
    相册
    朋友
    lingll的专栏
    孟子E章
    我小弟寻斌
    殷鹏
    特种兵
    莫依
    虎子的blog
    超级笨狼
    陈锐新书
    龙的天空
    自己的其他blog
    博客园的blog
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 javascript中apply方法和call方法的作用以及prototype.js中的应用收藏

    新一篇: vbscript以及javascript的事件委托方案 | 旧一篇: 如何利用javascript中的原型实现继承

    call方法在msdn中的解释  调用一个对象的一个方法,以另一个对象替换当前对象。

    apply方法在msdn中的解释 应用某一对象的一个方法,用另一个对象替换当前对象。

    这个解释也是非常抽象的,这两个方法的作用基本是一样的,举个例子

    <script>
    function cls1()
    {
      this.a='123';
    }
    cls1.prototype.fun1=function()
    {
      alert(this.a);
    }
    function cls2()
    {
      this.a='456';
    }
    var o1=new cls1();
    var o2=new cls2();
    o1.fun1.apply(o2);
    </script>

    只有o1对象的类cls1中有fun1这个方法,但是,这时我们需要用o2对象替代o1对象,所以这个时候显示的this.a会是456,呵呵很神奇吧,换成call方法也是一样的,这两种方法使用的不同点仅仅是参数的使用方法上不同,这里就不多做解释了。

    大家可以在prototype.js里看到
    var Class = {
      create: function() {
        return function() {
          this.initialize.apply(this, arguments);
        }
      }
    }
    这种代码,相当的夸张,很多人很容易被这种bt的代码弄糊涂,其实仔细分析其中的道理却也不难

    显然这种写法代表了Class是声明的一个Object对象,其中create是这个object对象的一个属性,这个属性就是一个函数。这个函数执行过后返还一个函数。可能这样解释太复杂了,那不如做一个试验好了。

    <script>
    var x=function(){return function(){alert(123);}}
    var n=x();
    n();
    </script>
    很好玩吧,这里n就是x函数执行过后返还给的一个函数也就是n现在等于了function(){alert(123);}再执行n()的时候就跳出了123

    现在开始讲难点 this.initialize.apply(this, arguments);

    这句表达了什么含义,其实现在先看看prototype.js里怎么调用的就明白了

    var Template = Class.create();

    Template.prototype = {
      initialize: function(template, pattern) {
        this.template = template.toString();
        this.pattern  = pattern || Template.Pattern;
      },....省略代码若干

    var template = new Template(replacement);

    第一句话Class.create(); 就是返还给Template 一个函数,这个函数是
    function() {
          this.initialize.apply(this, arguments);
        }
    当执行var template = new Template(replacement);时,就变成了要执行这个函数,而这个函数的作用是
    执行当前类中initialize这个函数

    所以prototype.js中的每一个类都预留了
    Template.prototype = {
      initialize: function(template, pattern) {
        this.template = template.toString();
        this.pattern  = pattern || Template.Pattern;
      },....
    这么个函数,如果没有这个的话,程序将会出错

    知其然,知其所以然,为什么要这么写呢?

    一般我们声明的时候funciton fun(){} var o=new fun();这样感觉fun又是类又是构造函数很别扭,为了分开这种不是很友好的代码方案,所以prototype.js使用了如上方法  

    发表于 @ 2007年10月23日 16:41:00|评论(loading...)|编辑

    新一篇: vbscript以及javascript的事件委托方案 | 旧一篇: 如何利用javascript中的原型实现继承

    评论

    #coder_java 发表于2008-07-17 17:27:45  IP: 125.35.4.*
    老师您好,我想请教如何在上传时验证服务器端文件是否已经存在,若存在弹出js提示是否覆盖,确定时,就覆盖已有的文件,取消就返回浏览状态,若有示例能否发到小弟email:pigdone@126.com, 谢谢!
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © liuxiaoyi666