zoukankan      html  css  js  c++  java
  • ExtJs与JavaScript的call方法

      之前在教学视频有看过javascript的call。这个方法在ExtJs中是很常用的。

      以前在搞ExtJs的时候总是忽略initComponent里面的一句代码,如下所示。今天在看其他人代码的时候发现调用的函数和自己想像的不一样。所以认真看了一下代码,再结合之前js关于call的笔记。知道了其中的原因

    Son.superclass.initComponent.call(this);

    这里的call就是调用"Son"父类的initComponent函数,并把this传进去,这个this是Son的实例对象。

    下面用一个js代码解释一下这个call 是怎样的

    function Dog(name){
        this.name = name;
    }
    function test(){
        alert(this.name);
    }
    var dog = new Dog('lil');
    test.call(dog);//这句话相当于dog.test();所以test()里面的this是dog,即this.name是dog.name,即弹出'lil'

    如上面代码所示,test.call(dog)等价于dog.test();

    下面举ExtJs代码的例子

    Son = Ext.extend(Father,{
           initComponent : function() {
          Son.superclass.initComponent.call(this);//这里调用父类的initComponent方法,即Father的initComponent方法,并把this,Son的实例对象做为参数传过去
           },
    
           test : function() {
              alert('test in Son');
        }
    }
    
    Father = Ext.extend(Ext.Panel,{
           initComponent : function() {                    
          Father.superclass.initComponent.call(this);
             this.test();//这里的this是Son的实例对象,相当于Son son = new Son();son.test(); 
             //所以调用的是子类的test方法而不是父类的test方法,我之前以为是调用父类的test方法       
           },
          test : function() {
             alert('test in Father');
    }
    }
  • 相关阅读:
    java——阶段性整理(方法的重载重写和一些关键字)
    设计模式——单例模式
    source
    set和setenv
    c++编译加执行脚本
    python脚本小记
    转义字符
    istream_iterator/ostream_iterator
    字符串替换程序 p324
    程序编译后运行时的内存分配
  • 原文地址:https://www.cnblogs.com/baron89/p/2696659.html
Copyright © 2011-2022 走看看