ExtJs与JavaScript的call方法

本文通过示例讲解了ExtJS中如何使用superclass.call方法来调用父类的方法,并解析了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');
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值