JavaScript中apply函数调用返回undefined的问题求助
为什么apply调用结果是undefined?
嘿,这问题我之前刚踩过坑!咱们来一步步拆解:
你的问题核心在于**setName函数没有返回值**——它只是修改了this.fullName这个属性,但没有用return语句返回任何内容,JS里这种没有显式返回的函数,默认会返回undefined。
而callBack.apply(createdObj, [firstName, lastName])的返回值,就是callBack(也就是setName)执行后的返回值。所以你把这个结果赋值给变量,自然得到的是undefined啦。
两种解决办法
办法1:让setName返回修改后的结果
给setName加上return语句,这样apply调用后就能拿到你想要的结果:
var thisObj = { fullName: 'test', setName: function(firstName, lastName) { this.fullName = firstName + " " + lastName; return this.fullName; // 新增返回语句 } } function getInput(firstName, lastName, callBack, createdObj) { return callBack.apply(createdObj, [firstName, lastName]); } // 调用测试 var result = getInput("John", "Doe", thisObj.setName, thisObj); console.log(result); // 会输出 "John Doe"
办法2:直接访问修改后的对象属性
如果不想改setName,也可以在apply调用后,直接去访问createdObj的fullName属性:
var thisObj = { fullName: 'test', setName: function(firstName, lastName) { this.fullName = firstName + " " + lastName; } } function getInput(firstName, lastName, callBack, createdObj) { callBack.apply(createdObj, [firstName, lastName]); return createdObj.fullName; // 返回对象的属性值 } // 调用测试 var result = getInput("John", "Doe", thisObj.setName, thisObj); console.log(result); // 同样输出 "John Doe"
简单总结:apply只是帮你改变函数的this指向并执行它,它的返回值完全取决于你调用的那个函数有没有返回内容~
内容的提问来源于stack exchange,提问作者user1871869
相关产品推荐
相关产品推荐

