javascript - 嵌套函数作为javascript中的方法

标签 javascript function methods

我正在努力理解 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);   

最佳答案

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

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)

你的不工作有几个原因。首先,你永远不会从最外层的函数中返回任何东西。其次,您创建并立即执行一个函数,该函数的 output 然后成为您的 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;
}

这相当于我上面写的。

关于javascript - 嵌套函数作为javascript中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49057110/

相关文章:

java - 尝试弄清楚递归基础知识

javascript - 编写 for 循环以使用数组创建多个方法

javascript - 我如何删除第一个 <a> 之后的 <td> 中的所有内容

sql - 是否可以在 Sql server 级别创建全局存储过程

c++ - const 成员函数的语义是什么?

c - 如何计算素数

c++ - 无法通过函数指针c++执行类函数

php - 如何将数组数据类型发送到服务器?

javascript - 不要在 Blogger 中缓存图像

javascript - 如何修复 JQuery Datepicker 日期格式?