JavaScript-javascript apply slice问题

UI设计界面 UI设计界面 主题:1059 回复:2190

JavaScript-javascript apply slice问题

夜无邪 发布于 2017-03-21 字数 576 浏览 1082 回复 3
<SCRIPT LANGUAGE="JavaScript">
<!--
Function.prototype.method=function(name,func){
this.prototype[name]=func;
return this;
}
Function.method("bind",function(that){
var method=this,
slice=Array.prototype.slice,
args=slice.apply(arguments,[1]);

return function(){

return method.apply(that,args.concat(slice.apply(arguments,[0])));
}
});
var x=function(){
return this.value;
}.bind({value:666});
x();

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(3

浮生未歇 2017-09-27 3 楼

这里的[1]应该就是代表的函数参数2的值,[0]应该就是代表的函数参数1的值

想挽留 2017-09-23 2 楼

先来了解一下arguments是个啥东西,arguments是进行函数调用时,创建的一个隐藏对象。arguments是一个类似数组但不是数组的对象,说它类似数组是因为其具有数组一样的访问性质及方式,可以由arguments[n]来访问对应的单个参数的值,并拥有数组长度属性length。还有就是arguments对象存储的是实际传递给函数的参数,而不局限于函数声明所定义的参数列表,而且不能显式创建 arguments 对象。arguments 对象只有函数执行时才可用。
也就是说我们可以用arguments[0]、arguments[1]...来代替函数中的参数1、参数2...

这里的[1]应该就是代表的函数参数2的值

再来说一下slice函数,slice是返回数组中的一段 返回值是个数组类型。比如:

var arr = [1,2,3,4,5];
var cc = arr.slice(1,3);//cc就是[2,3]
var dd = arr.slice(1);//dd就是[2,3,4,5]

所以slice.apply(arguments)就是把arguments对象生成一个数组对象的功能。

slice.apply(arguments,[0])这里的[0]和上面的[1]类似,它代码参数1的值。

浮生未歇 2017-08-03 1 楼

 <script>
var YUI = {};
YUI.namespace = function() {
//因为arguments不是数组,所以不能直接调用slice方法。用call和apply也就是要打破这种情况。
//就是将javascript里面array的slide方法给arguments来用。
var args = Array.prototype.slice.call(arguments, 0), i;
//array.slice(start, [end]);
//slice 方法返回一个Array对象,slice方法从start一直复制到end所指定的元素。
//如果省略end,那么slice方法将从start一直复制到array的结尾
//funName.call(obj[,arg1[,arg2[,argN]]]);
//obj对象调用funName函数,或者传递arg1,arg2,arg3等参数
//funName.apply(obj[,args]);
//obj对象调用funName函数,或者传递args数组参数
//如果obj为null,则默认为window对象
for (i = 0; i < args.length; ++i) {
if (args[i].indexOf('YUI') != 0) {
args[i] = 'YUI.' + args[i];
}
}
return args;
}
//YUI.namespace('core','util','widget'); //["YUI.core", "YUI.util", "YUI.widget"]
//YUI.namespace.apply(null,['core','util','widget']); //["YUI.core", "YUI.util", "YUI.widget"]
</script>