首先来看看prototype.js里的inject方法
手册中的描述:
inject(accumulator, iterator) -> accumulatedValue 基于迭代子所产生的前一个结果递增地构建一个结果值。可以用来构建数组、数字数额/平均值等等。
用法:
[1, 2, 3].inject([], function(array, value) {
array.push(value * value); return array;
});
// 构建给定数组各元素平方的数组 -> [1, 4, 9]
在jQuery也能找到个方法能达到上面的效果
手册中的描述:
jQuery.map(array,callback) -> Array 将一个数组中的元素转换到另一个数组中。作为参数的转换函数会为每个数组元素调用,而且会给这个转换函数传递一个表示被转换的元素作为参数。转换函数可以返回转换后的值、null(删除数组中的项目)或一个包含值的数组,并扩展至原始数组中。
$.map( [1,2,3], function(value){
return value * value;
});
// -> [1, 4, 9]
现在我要把一个数组里各个元素值累加,比如[1,2,3,4]要得到10
用prototype的inject方法实现
$R(1,4).inject(0, function(acc, value) {
return acc + value;
})
// -> 10
这回map方法不好用了,map方法是转换到数组去的,我们直接要值,没关系,还有其他方法
jQuery.each(obj,callback) 通用例遍方法,可用于例遍对象和数组。
var result =0;
$.each( [1,2, 3,4], function(i,value){
result += value;
});
//result->10;
当然,prototype也有each的遍历方法,实现方法差不多
var result =0;
[1, 2, 3,4].each(function(value,i){ //[1,2,3,4]正好是个范围用$A($R(1,4))或者$R(1, 4)或者$(1,2,3,4)都行
//另外prototype和jQuery的回调函数参数顺序是反的
result += value;
});
//result->10;
现在我在考虑能不能也给jQuery加个inject方法呢
ok,就模拟prototype,以插件形式来给jQuery对象扩展个inject方法吧
;(function($) {
$.extend({
inject : function(_array, memo, iterator) {
$.each(_array, function(index, value) {
memo = iterator(memo, value, index);
});
return memo;
}
});
})(jQuery);
好了,现在就来看看写的插件能调用到方法的效果吧
$.inject([1, 2, 3, 4], [], function(array, value) {
array.push(value * value);
return array;
}); // -> [1, 4, 9,16]
$.inject([1, 2, 3, 4], 0, function(acc, value) {
return acc + value;
}); // 返回数组各元素累加后的值 ->10;
$.inject([1, 2, 3, 4, 5], 1, function(acc, value) {
return acc * value;
});// 返回数组各元素相乘后的值 ->120
注:在prototype1.6版本新加段iterator = iterator.bind(context);用于动态绑定this上下文
//这个我一开始的写法
iterator = (function(fn, context) {
var args = Array.prototype.slice.call(arguments, 2);
return args.length == 0 ? function() {
return fn.apply(context, arguments);
} : function() {
return fn.apply(context, args.concat.apply(args, arguments));
};
})(iterator, context);
//这个是把ptototype中用到相关方法整合的结果
iterator = (function(fn, context) {
if (arguments.length < 3 && typeof arguments[1] == "undefined")
return fn;
var args = Array.prototype.slice.call(arguments, 2);
return function() {
var a = (function(array, args) {
var arrayLength = array.length, length = args.length;
while (length--)
array[arrayLength + length] = args[length];
return array;
})(Array.prototype.slice.call(args, 0), arguments);
return fn.apply(context, a);
};
})(iterator, context);
分享到:
相关推荐
### 基于jQuery的SQL注入攻击防范实现 #### 一、引言 SQL注入攻击是Web应用程序中常见的安全威胁之一。它通过恶意输入来操纵数据库查询,从而获取未授权的数据或执行非法操作。传统的防御措施多集中在服务器端,如...
语言:English (United States) 在页面中插入jQuery。 点击Chrome右上方的图标,将jQuery插入任何页面。 --Changelog--版本1.1.0:-将默认JQuery更新为3.3.1
将jQuery添加到当前选项卡。 允许您将jQuery 1.8.1注入任何页面。 -适用于HTTP和HTTPS-可以选择在所有标签上以及通过页面重新加载来保留 支持语言:English
7. **优势**:使用`javax-inject.jar`进行依赖注入,可以使代码更加清晰、简洁,减少硬编码,增强代码的可读性和可维护性,同时便于单元测试,因为测试时可以更容易地替换或模拟依赖。 8. **使用方法**:在Java项目...
在本文中,我们将深入探讨javax.inject的核心概念、使用方法以及与Hibernate框架的集成。 一、javax.inject简介 javax.inject包提供了三个主要的注解:@Inject、@Named和@Provider。这些注解帮助开发者声明和管理...
VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码...
Usage: injectdll.exe [process name] [dll path] [option number]option 1 - CreateRemoteThreadoption 2 - NtCreateThreadExoption 3 - RtlCreateUserThread
6. **jQuery.sqlInject.js**:这个文件可能是一个扩展库,提供了一种方便的方法来执行SQL查询,可能是为了简化PHP与MySQL数据库之间的交互。 7. **login.js**:这是项目的前端JavaScript文件,其中包含了处理用户...
官网上说provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。 provide: Object | () => Object(一个对象或返回一个对象的函数) inject...
Spring 依赖的 javax.inject.Provider
同时,它也提供了一个安全的环境,用于模拟和研究注入攻击,避免在实际网络环境中造成潜在的危害。 其次,让我们深入了解一下DLL注入的工作原理。在Windows系统中,当一个进程启动时,它可以加载其他DLL文件。DLL...
`javax.inject.Inject`注解是最核心的注解,它用于标注一个构造函数、字段或方法,表明这个构造函数、字段或方法的依赖应该由外部容器(如Google Guice、Spring框架等)自动注入,而不是由类自己创建。通过这种方式...
总之,这个压缩包包含的“inject.dmg”和“inject.dmg.signature”文件是iOS 13系统定位服务驱动的更新,提供增强的定位功能和安全性。在使用时,用户需要验证签名以确保文件的合法性,并根据设备的当前iOS版本进行...
1. `@Inject`:这是最基础的注解,用于标记一个字段、构造函数或者方法参数,表示该成员需要被依赖注入。容器会在运行时自动提供合适的实例。 2. `@Named`:这个注解用于为注入的对象指定一个唯一的名称。在有多个...
在Android开发中,有时我们需要模拟按键事件,...通过上述方法,开发者可以实现类似手机遥控器的功能,使得应用能够模拟按键事件,即使在后台或跨进程情况下也能正常工作。希望本文能对你在处理此类问题时提供帮助。
code inject 逆向工程 做一些工具必备
2. **inject2download**:可能是指一种能够利用HTTP注入下载远程文件的方法或工具。 3. **http_inject**:强调了HTTP协议层面的注入活动。 4. **inject**:通用术语,表示注入行为,可能包括多种类型的注入攻击。 ...
标题中的"inject.dmg 14.1"指的是一个名为"inject"的磁盘映像文件,版本为14.1。在IT行业中,".dmg"是苹果操作系统(macOS)中常用的磁盘映像格式,用于分发软件或系统更新。14.1可能代表该软件或系统的具体版本号。...
jQuery.fn = jQuery.prototype = { init: function( selector, context ) { // Make sure that a selection was provided selector = selector || document; // Handle $(DOMElement) if ( selector.nodeType ...
sisu-inject-bean-1.4.2.jar