【问题标题】:Nested function as method in javascript嵌套函数作为javascript中的方法
【发布时间】:2018-03-01 19:15:02
【问题描述】:

我正在努力理解 javascript 的基本概念。如果我在下面的第 8 行中只使用“gear += 1”,下面的代码似乎工作正常,但我不明白为什么当我使用“this.gear += 1”时这不起作用。它给出的结果为 NaN。谢谢。

(function bike(speed, tank, gear) {
  var i = {};
  i.speed = speed;
  i.tank = tank;
  i.gear = gear;
  i.addgear = (function() { 
    // works fine with "return gear+= 1" Why not with "this"?     
    return this.gear += 1;  
 })();

 console.log("mybike", i);   
})(120, 12, 5);   

【问题讨论】:

  • 您为什么希望this 能够工作?这一切看起来都不是class-y(包括ES5之前的JS OOP),所以我不太确定要解释什么。
  • 您对 i.addgear 的关闭正在立即执行。
  • @EthanKaminski - 实际上,将addgearthis 设置为i 是非常有意义的...除了OP 可能无意中分配了@987654321 的结果@ 到 addgear 而不是匿名函数。
  • @JDB - 是的,这正是我的观点。 addgear 的 this 应该充当我……但它没有……你能说出原因吗?
  • 对于那些投票认为这是标准“this 如何工作”帖子的副本的人......这不是这个问题所问的,不是直接的,也不是那里的答案真的有帮助解释提供的代码有什么问题或如何获得所需的行为。

标签: javascript function methods


【解决方案1】:

有很多方法可以实现您正在寻找的东西,包括 ES2015 及更高版本的 class 关键字或作为其基础的原型系统。这是一个非常简单的示例:

function bike(speed, tank, gear) {
  return {speed, tank, gear, addGear: function() {return this.gear += 1}}
}

const myBike = bike(120, 12, 5)
console.log(myBike);
myBike.addGear();
console.log(myBike)

你的不工作有几个原因。首先,你永远不会从最外层的函数中返回任何东西。其次,您创建并立即执行一个函数,其 输出 然后成为您的 addGear 值。对您的代码最简单的修复是这样的:

function bike(speed, tank, gear) {
  var i = {};
  i.speed = speed;
  i.tank = tank;
  i.gear = gear;
  i.addgear = function() { 
    return this.gear += 1;  
  };
  return i;
}

这将相当于我上面写的。

【讨论】:

    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 2012-09-11
    • 2013-07-07
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多