0
有人告诉我,它使'arguments'对象成为一个真数组并且也用于创建一个现有数组的副本是有用的。但是,是否需要转换为类似数组的对象?这样做的好处是什么?将函数的参数转换为类似数组的对象
function toArray(obj) {
return Array.prototype.slice.call(obj);
}
function bind(scope, fn) {
return function() {
// why not just return fn.apply(scope, arguments); ?
return fn.apply(scope, toArray(arguments));
};
}
我知道的好东西“参数”对象是它所包含的“长度”属性,所以我们可以转换为类似数组的对象,但是当我通过在物体通过像
测试它x = {
'a': 'a',
'tt': 'tt',
'2':'2',
length:3
};
toArray(x); // [undefined x 2, 2]
它返回一个数组,其中undefined
元素,是因为他们的键不是数字吗?
*“为什么不'返回fn.apply(范围,参数);'” * ...鉴于你的榜样,这正是你应该做的。没有理由在这里执行'toArray(arguments)',除非你想传递参数的一个子集。 –
...它看起来像你的例子是一种*“迷你绑定”*功能。在一个典型的'.bind()'中,可以将'.concat()'传递的'arguments'到绑定的'arguments'的末尾,这需要一个数组来将这两个数组扁平化为一个扁平数组。像:'return fn.apply(scope,orig_args.concat(toArray(arguments)));' –
@CrazyTrain什么是orig_args?你可以举一个例子: – peter