js call相关问题

为什么不是在对象o的执行环境中进行?代码如下:

        function sum(num1,num2){
            return num1+num2;
        }
        var o={
            sum:function(num1,num2){
                return num1-num2;
            }
        }
        function callSum(sum1,sum2){
            return sum.call(o,sum1,sum2)
        }

        console.log(callSum(2,1));
阅读 1.8k
3 个回答

call改变this指向,但是你的sum中并没用到this,

function makeSum(num1,num2) {
    return this.sum(num1, num2);
}
function sum(num1,num2){
    return num1+num2;
}
var o={
    sum:function(num1,num2){
        return num1-num2;
    }
}
function callSum(sum1,sum2){
    return makeSum.call(o,sum1,sum2)
}

console.log(callSum(2,1));

按照lz想法可能这样吧。

call只是改变了this的指向

sum.call(o, sum1, sum2) //只是让sum函数内的this指向了对象o

你sum函数里根本就没用到this, call当然没有用

call() 的第一个实参是指调用函数的母对象
var num1 = 1, num2 = 2;
function sum(){

return this.num1 + this.num2;

}
var o = {

num1 : 10,
num2 : 20

}
sum.call(this); //3 默认this指向window
sum.call(o); //30 this指向o

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题