1、每一个函数都包含两个非继承而来的方法:call、applay
- 这两方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值
- call、applay的用途之一就是传递参数,但事实上,它们真正强大的地方是能够扩充函数赖以运行的作用域
- 使用call 和 applay 来扩充作用域的最大的好处就是对象不需要与方法有任何的耦合关系
// call 和 applay 最简单的用法,绑定一些函数,传递参数
function sum(a,b){
return a + b;
}
function call1(a,b){
return sum.call(this,a,b);
}
function apply1(a,b){
return sum.apply(this,[a,b]);
}
console.log(call1(10,20)); // 30
console.log(apply1(20,40)); // 60
// call 和 applay扩充 作用域
window.color = 'red';
var obj = {color:'blue'};
function showColor(){
console.log(this.color);
}
showColor.call(this); // red
showColor.call(obj); // blue
showColor.apply(this); // red
showColor.apply(obj); // blue
// call 方法的简单模拟 与实现
// function 方法
function test(a,b){
return a + b;
}
// 自定义的对象
var o = {};
o.x = 10;
o.y = 20;
o.method = test;
console.log(o.method(o.x,o.y)); // 30
delete o.method;