Javascript apply反射 和 extjs createCallback

方法调用是一个三元组<对象,方法名称,方法参数>

对象或者叫方法作用域:用于说明是哪个对象的方法,方法中this 指向哪个对象

方法名称

方法参数

方法调用方式

  • 传统方法调用方式:

对象.方法(参数)

  • javascript 反射的调用:

方法.apply.(对象,参数)

方法.call.(对象,参数)

  • Java反射的调用

方法.invoke.(对象,参数)


apply方法使用例子:

案例一:下面为extjs源码和使用举例。方法.createCallback(参数)。对象默认为window

基于以下两个条件,extjs的createCallback为函数的反射调用做了一层封装,它用于创建某函数的回调函数,回调函数的参数是提前确定好的:

1.javascript编译器会将反射调用转化为传统方法的调用

2.函数也是对象,也可以有函数

// Function.prototype.createCallback表示任何方法都可以调用createCallback。
// arguments是调用这个方法时传进来的参数,例如”abc”
// method是调用者(this表示方法自己)例如t
// method.apply(window, args); 执行t方法,参数是传进来的”abc”,作用域为window
Function.prototype.createCallback = function(){
  var args = arguments;
  var method = this;
  return function() {
    return method.apply(window, args);
  };
};
    function t(a){
            alert(a);
  }

     
   var x = t.createCallback("abc");
   window.x();


案例二:将父对象的构造函数绑定在子对象上

function Cat(name,color){
    Animal.apply(this, arguments);
    this.name = name;
    this.color = color;
  }
  var cat1 = new Cat("大毛","黄色");
  alert(cat1.species); // 动物


apply总结:

1.实现了构造函数的扩展,有点类似于JAVA,类的扩展。

2.实现了公共方法任何时间能被任何对象使用,相当于任何对象随时可以扩展方法。


参考文章

ExtJS createCallBack参考:

http://blog.csdn.net/wwwchenbing/article/details/3410266

ExtJS  createDelegate源码解析:

http://yiminghe.iteye.com/blog/394170

ExtJS中创建回调createCallBack与createDelegate的异同(之十)

http://liust1987.iteye.com/blog/767302 这个博主还有其他文章也可以参考

Javascript面向对象编程(二):构造函数的继承

http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值