Function.prototype.bind = function(){
var fn = this, args = Array.prototype.slice.call(arguments),
object = args.shift();
return function(){
return fn.apply(object,
args.concat(Array.prototype.slice.call(arguments)));
};
};
var myObject = {};
function myFunction(){
return this == myObject;
}
assert( !myFunction(), "Context is not set yet" );
var aFunction = myFunction.bind(myObject)
assert( aFunction(), "Context is set properly" );
下面对Jeffery代码的微小修改帮助我理解了内部匿名函数中使用的参数。我只是改变了下面的3行
var introduce = function(greeting) { alert(greeting + ", my name is " + this.name + " ,home no is " + arguments[1]); }
hiBob(" 456"); // alerts "Hi, my name is Bob"
yoJoe(" 876");
谢谢大家
答案 0 :(得分:8)
arguments对象是一个类似于数组的对象,它只有length属性。
通过Array.prototype调用slice函数是将其转换为数组的常用技术,因此您可以直接在此示例中使用shift和concat等数组函数。
答案 1 :(得分:6)
Array.prototype.slice.call(arguments)
创建一个Array
,其中包含传递给函数的所有参数。
答案 2 :(得分:6)
此代码在名为Function
的{{1}}类型上创建一个新方法,该方法接受一个自由函数作为输入,并返回一个包装函数,该函数调用它就好像它是指定对象上的方法一样。这与.Net委托如何将函数及其关联的bind
引用包装在一起非常相似。
此外,如果向this
提供了多个参数,则这些附加参数将被添加到调用之前 - 此技术也称为currying。
为了尝试以更简单的方式解释它,请考虑以下事项:
bind
答案 3 :(得分:1)
要回答你的问题,这就是切片的作用
Array.slice(begin[,end])切片 method从a创建一个新数组 选定的数组部分。该 原始数组不受此影响 但是,如果一个字符串或数字 数组被改变,它没有被反映出来 在另一方面,而改变为 引用的对象可以在两者中看到 数组对象。切片方法使用 从零开始的数组索引 确定哪个部分 创建新数组。它提取出来 到'但不包括''结束' element(如果没有指定'end',则为 默认是最后一个元素)。该 以下代码创建一个名为的数组 '树'然后显示'切片' 它:代码:
trees = ["oak", "ash", "beech", "maple", "sycamore"] document.write(trees.slice(1,4))
输出:灰,山毛榉,枫树如果你 使用负面指数'结束', 这指定了一个如此多的元素 从最后的地方。继续 上面的例子,下面的代码 将通过显示第二个 阵列的倒数第三个元素:
代码:trees = ["oak", "ash", "beech", "maple", "sycamore"] document.write(trees.slice(1,-2))
产量:灰,山毛榉
至于给出当前上下文的切片,CMS有正确的答案
答案 4 :(得分:-1)
它将arguments
对象转换为Array
对象,以便他可以调用args.shift()
。
arguments对象是一个类似于数组的对象,它有0个或更多数字索引属性和length
属性