- 浏览: 98085 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
anybyb:
很详细,学习了
RSS从入门到精通(转载) -
hrsvici412:
浏览器的正中呢?布局中间放置的是iframe
Ext 中随着浏览器的变化window居中 -
Javakeith:
有点太长了!
RSS从入门到精通(转载)
为了研究Currying in Javascript,翻阅了很多外文网站,为的是找一个比较好的Currying方案,找到的比较详细的有如下(文章内部链接可能包含更多的相关文章):
发现大多人都用了Array.prototype.slice.call(argments,0),一直不明白这句是干什么的。而昨天温习了slice()方法,再参考Function.call(thisArg[, arg1[, arg2[, ...]]]),还是不得而知(我脑筋转得慢:|)。上网查,第一时间查老外的Google.com in English也没解释,真到查找“Array.prototype.slice 用法”时,才得到数篇。虽然我很鄙视搞收集的人,搞得互联网文章像是天下一大抄似的,但现在却恨少,只得三篇(一模一样的三篇,责任编辑为admin或者超级管理员,作者是佚名。)
下面就我的理解,对Array.prototype.slice.call进行解说,菜鸟留下,大虾吐口水:
Update: 下面写的可能有点难懂,怕刚接触Javascript的人可能会看不懂,请大家看完后留个言,谢谢!
Array.prototype.slice.call(thisArg[, arg1[, arg2[, ...]]])
成员介绍:
Array [object]
Array对象(即数组对象)
prototype [property]
Javascript的原型,此prototype非Prototype.js,可以暂且理解为Java中的静态属性/方法。总之这个不好说,详细请看JavaScript中的prototype(原型)属性研究。
slice [Function]
call [Function]
神奇的方法,该方法是所有Function对象里的方法,所以slice就有这样一个方法。用于把Function对象里的this替换为目标对象。看这里。
串起来就是:
用人类的语言说,就是Array有个prototype,slice是prototype的儿子,call是slice的妻子(很多砖头飞过来。)请继续往下看。
作用效果:Array.prototype.slice.call == [].slice
虽然运行结果是一个样的,但经过试验(别人做的试验,不是我),前者的运行效率比后者大大提高,所以就这样应用。
机理:
这里的slice方法就是一个Function对象。通常情况下,程序员通过如下方法调用Function,实质是普通的函数调用方法:
Array.slice(begin,end)
至于call()方法,METHOD: Function::call告诉我们,可以通过
Function.call(thisArg[, arg1[, arg2[, ...]]])
的形式调用一个Function对象,把当中的this对象替换为thisArg,即可以得到下面的代码:
Array.prototype.slice.call(obj,begin,end)
用伪代码模拟过程:
好,我们用伪代码的方法来模拟整个过程:
var mySlice=Array.prototype.slice; alert(mySlice); //alert: function(begin[,end]){...},这是个“函数” var array_empty=mySlice(begin,end); //create a new,empty array set array_empty=obj; //此时,把obj赋给这个空的数组,使数组有了种子, //这就是call()所做的事,“人工受精” alert(array_empty); //这是个未定型的数组对象,由Javascript内部掌控着, //这样看可能没什么结果,但有结果的话,就一定与obj有关 //下面是关键的一行: var array_last=array_empty.slice(begin,end); /** *虽然之前说未定型, *但返回的已经是一个数组了,我们对数组进行切割,但拿什么进行切? *没错,就拿用obj制造出来的数组进行切割, *一个新的数组对象产生了! */
同样,Array.prototype.slice.apply(obj)及类似的代码也可以这样理解,只要不被prototype干扰到就行了。看到这里还不明白的人请重温Array.slice(begin,end)。
相关阅读:
[1]Array.prototype.slice.apply 使用技巧
[2]Array-like Objects in JavaScript。
发表评论
-
Ext 中随着浏览器的变化window居中
2011-01-11 16:40 1211//** Ext.ux.CenterWindowPlugin ... -
ext 表单验证实例(转)
2010-12-19 19:21 1347/放在onReady的function(){}中 Ext.Q ... -
点击左右滑动 jquery实现
2010-12-18 12:54 1887<!DOCTYPE html PUBLIC &quo ... -
一个最简单的例子,清楚说明回调函数的作用和强大功能
2010-11-15 14:54 2311回调函数(Callback Functions) 因为函数和 ... -
js倒计时2
2010-08-26 11:45 689<script language="JavaS ... -
修改 window.setTimeout,使之可以传递参数和对象参数
2010-08-26 11:44 1125<script language="javas ... -
JS倒计时代码
2010-08-24 14:35 1253第一种:精确到秒的java ... -
JavaScript正则表达式exec和test方法实例!
2010-07-29 09:18 1124<script LANGUAGE="javas ... -
jQuery插件开发 - 其实很简单
2010-07-09 10:46 764【前言】jQuery已经被广泛使用,凭借其简洁的API,对DO ... -
Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)
2010-06-22 16:27 6661判断select选项中 是否存在Value="pa ... -
js技巧收集(200多个)
2010-06-17 18:06 8181.文本框焦点问题onBlur:当失去输入焦点后产生该事件on ... -
使用Javascript操作DOM的一些方法--元素的访问/复制等
2010-06-11 19:55 651getElementById(id)这是通过id来访问某一 ... -
Javascript遍历页面控件
2010-06-10 17:41 728function validate(){ //var El ... -
javascript中showModalDialog和showModelessDialog区别
2010-06-10 14:40 1004javascript中showModalDialog和show ... -
利用JS中window.showModalDialog()详解
2010-06-10 14:34 930window.showModalDialog()方法 ... -
JavaScript事件绑定的方法说明
2010-06-10 14:33 978事件使得客户端的 JavaSc ... -
十个技术含量超高的JS图片展示特效
2010-05-18 17:32 18433十款超级酷的JS图片展示代码,一定会给你强烈的震撼,技术含量超 ... -
JavaScript CSS Style属性对照表
2010-05-15 11:42 700为了达到某种特殊的效果我们需要用Javascript动态的 ... -
介绍 JSON
2010-05-15 10:51 622JSON(JavaScript Object Notati ... -
JS小游戏贪吃蛇+详细注释
2010-05-08 11:49 1130<!DOCTYPE html PUBLIC " ...
相关推荐
发现大多人都用了Array.prototype.slice.call(argments,0),一直不明白这句是干什么的。而昨天温习了slice()方法,再参考Function.call(thisArg[, arg1[, arg2[, ...]]]),还是不得而知(我脑筋转得慢:|)。
永远不要写Array.prototype.slice.call(arguments); 以后再! 这是基于但使用Object.defineProperty(arguments.constructor.prototype, [functionName], {enumerable: false, configurable: true, value: [function...
arguments在JavaScript语法中是函数特有的一个对象属性(Arguments对象),用来引用调用该函数时传递的实际参数。
经常的,可以看到Array.prototype.slice(arguments, 0); 这个写法可以用于function() {} 内,这样可以将函数的参数列表转换成一个真正的数组。请看一个例子: 代码如下:var slice = Array.prototype.slice;var ...
Array.prototype.slice.call(thisArg[, arg1[, arg2[, …]]])成员介绍: Array 数组对象 prototype [property]是javascript中对象的属性,用来返回对象的原型引用,可以动态的给此添加方法和属性,对象如array,...
slice 可以用来获取数组片段,它返回新数组,不会修改原数组。
虽然不太常用,但我们的确可以给对象添加以数字为属性名的属性: 代码如下...Array.prototype.slice.call(obj)); 上面这段代码在IE下直接报错,在Firefox下虽然没有报错,输出内容却是空。也就说,转换失败了。这种
在JavaScript中,数组可以使用Array构造函数来创建,或使用[]快速创建,这也是首选的方法。数组是继承自Object的原型,... var nodesArr = Array.prototype.slice.call(document.forms); var argsArr = Array.pro
代码如下: [removed] function fn(name){ if(typeof name === “string”){ var args = Array.prototype.slice.call( arguments, 1 ); for(var i=0;i<args.length;i++){ alert(args[i]);//结果: 111 222 ...
快速js :smiling_face_with_heart-eyes: 编写快速JavaScript ...Array.prototype.slice.call x 23,349,580 ops/sec ±1.42% (88 runs sampled) lodash.toArray x 11,654,756 ops/sec ±1.33% (88 run
这篇文章来回答javascript通用循环遍历方法forEach中最后提到的关于伪数组的... 我们可以通过Array.prototype.slice.call(fakeArray)将伪数组转变为真正的Array对象。 来看个示例: 代码如下: var fakeArray01 = {0:’a
本文实例为大家分享了JS实现滑动插件的具体代码,供大家参考,具体内容如下 基本思路是封装一个Slider类, 拥有默认初始配置参数。 Slider.prototype(原型链上)拥有实现... var args = Array.prototype.slice.call(ar
每个人都知道我们不应该修改Array.prototype 。 但是,如果我们真的想拥有array.first()怎么办? 我们可以以特质整齐且无害地隔离一些接近的东西! npm install arbitrait const trait = require ( "arbitrait" ...
Array.prototype.slice()中: slice()方法将数组的一部分的浅拷贝返回到从开始到结束(不包括结束)选择的新数组对象中。 不会修改原始数组。 问: slice适用于对象吗? 一种: 。 所以你可以这样做: const info = ...
高级JavaScript 本文档基于John Resig的高级JavaScript网站。 如果这些概念对您而言似乎很复杂,那么我建议您使用,同时也强烈... var fn = this , args = Array . prototype . slice . call ( arguments ) , object =
虽然现在慢慢减少了对jQuery的使用(项目上还是用,效率高点。平时基本不用了),希望从而减少对jQuery的依赖度。 但是这链式操作的方式实在吸引人(貌似现在... //var args = Array.prototype.slice.call(arguments,0
虽然现在慢慢减少了对jQuery的使用(项目上还是用,效率高点。平时基本不用了),希望从而减少对jQuery的依赖度。 但是这链式操作的方式实在吸引人(貌似现在... //var args = Array.prototype.slice.call(arguments,0
昨天阿丹传了一个javascript中的重载例子给我,感觉不错.... window.setTimeout = function(fRef, mDelay) { if(typeof fRef == ‘function’){ var argu = Array.prototype.slice.call(arguments,2); va
本文实例讲述了js prototype深入理解及应用。分享给大家供大家参考,具体... var args = Array.prototype.slice.call(arguments, 1); return args; } 咦???看着上面这行代码,你是不是对prototype只是属于函数产生