Ext对JavaScript的几个基本类进行了扩展。
它们是 Function, String, Array, Date和Number.
Function加入了回调、拦截和代理机制等。
为什么要加入这些机制呢,使用起来的时候方便些吗?
createCallback(),可以 为原来的函数创建 回调函数。
把参数传进去。
var sayHello = function(name) {...}
一些 handler函数,必须是无参 函数吗? 使用 sayHello.createCallback('jack'),就会创建一个新的函数对象。这个对象的定义形式应该是:
function() {
sayHello('jack');
} // 就是这种所谓的回调机制吗?
(没有传参数的话,把函数引用放到 handler 后面就可以了。 如果要传参数,在handler后直接放func(args),则解析后函数会马上调用,而不是事件触发时才调用的回调函数了。。。。 所以如果传参一定要用createCallback()方法, 为什么一定要如此,JS语法的局限性?)
createCallback : function(/*args...*/){ // createCallback函数也开始变得容易理解了。
// make args available, in function below
var args = arguments;
var method = this; // Ext中,已经对Function进行扩展,所以所有的函数对象都可以使用 createCallback()方法创建回调函数?
return function() { // 最后返回的确实是一个函数对象。只不过把参数绑定到 被回调的函数了。
return method.apply(window, args); // 为什么限定 的范围是window,window貌似在JS起很重要的作用,在多个地方看到了。 href转向的时候也要用到这个的。 还有JS本身的apply机制,这些底层机制都是有必要了解的。
};
}
对这几个类的扩展,完全在Ext.js这个文件中体现出来了。对 Function的扩展结构如下所示:
Ext.apply(Function.prototype, {
createCallback: function() { ...},
createDelegate: function(obj, args, appendArgs) { ...},
defer: function(millis, obj, args, appendArgs) {...},
createSequence: function(fcn, scope) {...},
createInterceptor: function(fcn, scope) {...}
}) // 很多加入的函数也是有参数的。 Ext.apply在 这里就是把 函数加到 Function的原型中去吗? 这样所有 函数都具备了以下的几个扩展方法?
Ext.apply和 JavaScript本身的apply有什么关系?
(function() {
alert('immediate');
})(); // 这种代码风格是强制执行用的? Ext.js中,就把一些扩展代码写在这种代码段中。原以为只要把函数包在()中就可以,居然还要在末尾加上()
Ext.apply(Ext, { ... }) // Ext扩展,可以直接用 { ... }声明一个很大的对象,来扩展Ext? apply 三个参数的函数Ext.js里面有定义,两个参数的没有见到。