js改变函数this指向方法,用于CV
//function的prototype属性改变绑定执行环境对象的方法
// 1. apply方法(执行函数环境对象,arguments/参数数组)
(function () {
function sum(num1, num2) {
return num1 + num2;
}
function callSum1(num1, num2) {
console.log(this);//window对象
// apply调用特定函数
return sum.apply(this, arguments);
}
function callSum2(num1, num2) {
console.log(this);//window对象
// apply调用特定函数
return sum.apply(this, [num1, num2]);
}
console.log(callSum1(10, 10));
console.log(callSum2(10, 10));
})();
// 2. call方法(执行函数环境对象,参数1,参数2...)
(function () {
function sum(num1, num2) {
return num1 + num2;
}
function callSum(num1, num2) {
// call调用特定函数,调用的参数必须逐个列举
return sum.call(this, num1, num2);
}
console.log(callSum(10, 20));//30
})();
//bind方法,创建函数绑定执行函数环境对象
(function() {
window.color = "red";
var obj = {
color: "blue"
};
function sayColor() {
console.log(this.color);
}
//bind方法会创建该函数的新实例,并把该实例绑定在放在参数位置的对象中
var objSayColor = sayColor.bind(obj);
objSayColor();//blue
sayColor();//red
})();