Ext.Function = {
flexSetter: function(fn) {
return function(a, b) {
var k, i;
if (a === null) {
return this;
}
if (typeof a !== 'string') {
for (k in a) {
if (a.hasOwnProperty(k)) {
fn.call(this, k, a[k]);
}
}
if (Ext.enumerables) {
for (i = Ext.enumerables.length; i--;) {
k = Ext.enumerables[i];
if (a.hasOwnProperty(k)) {
fn.call(this, k, a[k]);
}
}
}
} else {
fn.call(this, a, b);
}
return this;
};
},
bind: function(fn, scope, args, appendArgs) {
var method = fn,
applyArgs;
return function() {
var callArgs = args || arguments;
if (appendArgs === true) {
callArgs = Array.prototype.slice.call(arguments, 0);
callArgs = callArgs.concat(args);
}
else if (Ext.isNumber(appendArgs)) {
callArgs = Array.prototype.slice.call(arguments, 0);
applyArgs = [appendArgs, 0].concat(args);
Array.prototype.splice.apply(callArgs, applyArgs);
}
return method.apply(scope || window, callArgs);
};
},
pass: function(fn, args, scope) {
if (args) {
args = Ext.Array.from(args);
}
return function() {
return fn.apply(scope, args.concat(Ext.Array.toArray(arguments)));
};
},
alias: function(object, methodName) {
return function() {
return object[methodName].apply(object, arguments);
};
},
createInterceptor: function(origFn, newFn, scope, returnValue) {
var method = origFn;
if (!Ext.isFunction(newFn)) {
return origFn;
}
else {
return function() {
var me = this,
args = arguments;
newFn.target = me;
newFn.method = origFn;
return (newFn.apply(scope || me || window, args) !== false) ? origFn.apply(me || window, args) : returnValue || null;
};
}
},
createDelayed: function(fn, delay, scope, args, appendArgs) {
if (scope || args) {
fn = Ext.Function.bind(fn, scope, args, appendArgs);
}
return function() {
var me = this;
setTimeout(function() {
fn.apply(me, arguments);
}, delay);
};
},
defer: function(fn, millis, obj, args, appendArgs) {
fn = Ext.Function.bind(fn, obj, args, appendArgs);
if (millis > 0) {
return setTimeout(fn, millis);
}
fn();
return 0;
},
createSequence: function(origFn, newFn, scope) {
if (!Ext.isFunction(newFn)) {
return origFn;
}
else {
return function() {
var retval = origFn.apply(this || window, arguments);
newFn.apply(scope || this || window, arguments);
return retval;
};
}
},
createBuffered: function(fn, buffer, scope, args) {
return function(){
var timerId;
return function() {
var me = this;
if (timerId) {
clearInterval(timerId);
timerId = null;
}
timerId = setTimeout(function(){
fn.apply(scope || me, args || arguments);
}, buffer);
};
}();
},
createThrottled: function(fn, interval, scope) {
var lastCallTime, elapsed, lastArgs, timer, execute = function() {
fn.apply(scope || this, lastArgs);
lastCallTime = new Date().getTime();
};
return function() {
elapsed = new Date().getTime() - lastCallTime;
lastArgs = arguments;
clearTimeout(timer);
if (!lastCallTime || (elapsed >= interval)) {
execute();
} else {
timer = setTimeout(execute, interval - elapsed);
}
};
}
};
Ext.defer = Ext.Function.alias(Ext.Function, 'defer');
Ext.pass = Ext.Function.alias(Ext.Function, 'pass');
Ext.bind = Ext.Function.alias(Ext.Function, 'bind');
1.alias(object, methodName):将object的mothodName方法赋予给指定对象。
2.bind(fn,scope,args,appendArgs):将fn函数以scope作为上下文以args作为参数进行调用。
在JavaScript中,函数和其他值一样,也是数据,因此,它们可以从函数返回,被赋予给对象属性,存储在数组中,等等。
考虑下面的例子,其中包含了一个函数,他返回一个嵌套的函数。每次调用这个函数,它都返回一个函数。返回的函数的JavaScript代码总是相同的,但是,它所创建的作用域略为不同,因为外围函数的参数值在每次调用中都不同(也就是说,外围函数的每次调用的作用域链上,有一个不同的调用对象)。如果把返回的函数存储在一个数组中,然后来调用其中的每一个,将会看到每次返回一个不同的值。既然每个函数包含同样的JavaScript代码,并且每段代码都是从相同的作用域调用的,那么,唯一可能导致不同返回值的因素就是函数定义所在的作用域。
function makefunc(x) {
return function() {return x;}
}
var a = [makefunc(0), makefunc(1), makefunc(2)];
alert(a[0]());
alert(a[1]());
alert(a[2]());
分享到:
相关推荐
<script src="extjs/ext-all-debug.js"> ;width:320px;height:240px;border:1px solid #ccc;background:#ffc;padding:5px;line-height:25px;font-size:14px"> Ext.onReady(function() { Ext.Msg.show({ ...
在“Extjs源码之--Ext事件机制/继承关系”中,我们将深入探讨EXTJS如何处理事件以及其类层次结构。EXTJS的事件处理主要由EventManager.js这个文件负责,它是EXTJS事件系统的基础。 首先,EXTJS的事件机制基于观察者...
在EXTJS库中,`Ext.Ajax.request`是用于发送Ajax请求的核心方法,它支持异步和同步操作。本文将详细解析如何利用`Ext.Ajax.request`实现同步请求,并探讨其背后的原理和注意事项。 首先,我们需要理解Ajax的本质,...
标题"Ext.Ajax.request跨域"指出我们将探讨如何使用ExtJS库中的Ajax模块进行跨域请求。Ext.Ajax.request是ExtJS提供的一种发起Ajax请求的方式,它允许开发者向服务器发送异步HTTP请求。然而,由于浏览器的同源策略...
在EXTJS3中,`Ext.PagingToolbar()` 是一个非常重要的组件,用于在大量数据的网格或视图中实现分页功能。这个组件允许用户轻松地浏览和操作大量的记录,而不需要一次性加载所有数据,从而提高了应用程序的性能和用户...
- **下载包**:下载最新的Extjs4.x版本,通常包括源码、API文档、示例等。 #### 二、搭建Extjs4开发环境 - **开发工具准备**: - **MyEclipse**:确保已安装MyEclipse IDE。 - **Tomcat**:确保已安装并配置好...
EXTJS源码阅读可以帮助开发者更深入地理解其工作原理,从而更好地定制和优化应用。 在实际项目中,我们通常会将EXTJS库文件(如`ext-basex.js`)与其他EXTJS组件和应用代码一起使用。这些库文件包含了EXTJS框架的...
2. **引入核心库**:通过 `<script>` 标签引入 `extjs/adapter/ext/ext-base.js` 和 `extjs/ext-all.js`。 3. **编写 JavaScript 代码**:使用 Ext 提供的方法编写业务逻辑。 例如,以下代码展示了如何在页面加载...
Ext.onReady(function(){ Ext.Msg.alert('HelloWord', 'Hello Word!'); }); ``` **Ext类库简介** Ext JS的类库由底层API、控件和实用工具三部分构成: 1. **底层API(core)**:提供DOM操作、查询、事件处理和DOM...
- **遍历节点**: 获取到的节点列表可以通过循环来进一步处理,例如:`Ext.each(nodes, function(node) { ... });`。 #### 5. **响应事件** - **绑定事件**: 通过 `addListener` 方法为DOM元素绑定事件监听器,例如...
2. `build` 目录:存放经过压缩的ExtJS源码,适用于生产环境。 3. `docs` 目录:提供了详细的API帮助文档,是学习和查阅ExtJS功能的重要资源。 4. `examples` 目录:包含了许多实际的应用示例,帮助你理解如何运用...
在ExtJS的源码中,可以看到许多类似的设计: ```javascript // Ext.DomHelper 的单例实现 Ext.DomHelper = (function () { // 私有变量和方法 var privateVars; return { // 公共API createDiv: function ...
4. 完善的事件处理:ExtJS拥有强大的事件处理系统,允许开发者绑定各种事件,实现组件间的交互和响应式设计。 开始使用ExtJS,首先需要进行环境配置。下载最新版的ExtJS库,了解其目录结构,例如`resources`目录...
- `ext-all.js`是压缩后的源码,而`ext-all-debug.js`则是未压缩的版本,适用于调试。 - 开发时需要将`resources`包中的CSS和图像文件放到`common`目录下,并将`ext-all.js`和`adapter/ext/ext-base.js`放到`js`...
例如,`ext-tab-close-plugin.js` 的源码可能会包含以下内容: ```javascript Ext.define('MyApp.plugins.CloseTabOnDoubleClick', { extend: 'Ext.util.Plugin', alias: 'plugin.closeTabOnDoubleClick', init:...
为了正确地安装ExtJs库,首先需要将ExtJs的源码包放置到项目的WebRoot目录下,即项目的根目录。在安装过程中,需要创建以下文件夹结构: ``` -- WebRoot -- extEngine -- adapter -- builder -- resources -- ...
Ext.onReady(function() { var iframe = Ext.create('Ext.ux.IFrame', { src: 'http://example.com', plugins: ['miframe'] // 使用miframe插件 }); var panel = Ext.create('Ext.Panel', { items: [iframe]...
Ext.onReady(function(){ Ext.Msg.alert('helloWord','Hello Word!'); }); ``` EXT框架的基础主要包括底层API、控件和实用工具三大部分。底层API提供了DOM操作、事件处理、DOM查询等基本功能,是其他所有组件的...
标签中的“源码”意味着你需要理解EXTJS的底层工作原理,而“工具”则可能是指EXTJS提供的各种组件和辅助方法。在实际项目中,你可能需要结合CSS(jscss文件)来自定义下拉列表的样式,使其更符合应用的视觉设计。 ...
在IT行业中,ExtJS是一个广泛使用的JavaScript库,用于构建富客户端Web应用程序。它提供了一整套功能丰富的组件,包括表格、树形视图、图表等,使得开发人员能够创建复杂且用户友好的界面。本篇将详细介绍ExtJS中的...