js apply call caller callee bind 使用方法 区别分析
原文地址
http://www.jb51.net/article/20640.htm
一、call 方法
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
call 方法可以用另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
示例
[pcsh lang="js" tab_size="4" message="" hl_lines="" provider="manual"]
function Obj() {
this.value = "对象!";
}
var value = "global 变量";
function Fun1() {
alert(this.value);
}
window.Fun1(); //global 变量
Fun1.call(window); //global 变量
Fun1.call(document.getElementById('myText')); //input text
Fun1.call(new Obj()); //对象!
[/pcsh]
这里的Fun1函数每次执行call方法都会被更换一次调用的对象(thisObj)
二、apply方法
apply和call两者在作用上相同,两者在参数上有区别
如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])
apply方法只有两个参数,一个是替换的对象,一个是参数数组
三、caller 属性
可以参见上一篇文章
caller方法 返回一个对函数的引用,即调用了当前函数的函数体。
四、callee属性
返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。
五、bind
bind和apply call方法都是改变当前函数的执行对象execute context,特别之处是apply和call方法调用后,方法会直接被调用,如上面的例子,而bind方法改变了执行对象后,可以稍候执行
如下所示
[pcsh lang="js" tab_size="4" message="" hl_lines="" provider="manual"]
var first_object = {
num: 42
};
var second_object = {
num: 24
};
function multiply(mult) {
return this.num * mult;
}
Function.prototype.bind = function(obj) {
var method = this,
temp = function() {
return method.apply(obj, arguments);
};
return temp;
}
var first_multiply = multiply.bind(first_object);
first_multiply(5); // returns 42 * 5
var second_multiply = multiply.bind(second_object);
second_multiply(5); // returns 24 * 5
[/pcsh]
例二
[pcsh lang="js" tab_size="4" message="" hl_lines="" provider="manual"]
function add(arg1, arg2, arg3, arg4) {
return arg1 + ' ' + arg2 + ' ' + arg3 + ' ' + arg4;
}
var addMore = add.bind({}, 'a', 'b');
console.log(addMore('c', 'd')); // a b c d
[/pcsh]
最后更新于 2017-03-17 15:58:08 并被添加「」标签,已有 661 位童鞋阅读过。
此处评论已关闭