Javascript基础:访问嵌套函数

时间:2014-10-14 21:30:28

标签: javascript arrays nested

我正在尝试学习JavaScript。我正在处理一个问题,我正在制作一个购物清单:一系列包含物品,数量和价格的子阵列。从那里我计划添加项目,回读列表,删除项目等。我目前的问题是我无法访问子方法。我似乎无法找到关于如何做到的文档 - 但我一直在读这些方法是私有的吗?也许我离开了基地。我无法弄清楚我是如何设置它的,因此多种方法都可以相互通信。

var groceryList = function(food, quantity, price) {
  this.item = {};
  this.items = {food:food, quantity:quantity, price:price};
  return this.items

  this.addStuff = function(food, quantity, price) {
  this.items.push({food:food, quantity:quantity, price:price});
  return this.items
  };
  this.tallyList = function() {
    return items.length;
  }
}



var myList = new groceryList("cookie", 2, 1.00);
console.log(myList)
myList.addStuff("brownie", 1, 2.50);
console.log(myList.tallyList);

2 个答案:

答案 0 :(得分:1)

var groceryList = function(food, quantity, price) {
    this.items = [];
    this.items.push({food:food, quantity:quantity, price:price});

    var that = this;
    this.addStuff = function(food, quantity, price) {
        that.items.push({food:food, quantity:quantity, price:price});
        return that.items;
    };

    this.tallyList = function() {
        return that.items.length;
    };

    this.getItems = function() {
        return that.items;
    };

    return this;
};

var myList = new groceryList("cookie", 2, 1.00);
console.log(myList);
myList.addStuff("brownie", 1, 2.50);
console.log(myList.tallyList());

这是您要完成的正确(-ish)版本。

您的代码问题:

  1. this.items应该是任何数组,而不是对象。注意方括号,而不是花括号。
  2. 你的构造函数(groceryList函数)没有返回整个类 - 它只返回列表/数组。所以你不能调用myList.addStuff()或myList.tallyList() - 它们不存在!
  3. 请结帐How does the "this" keyword work?。与其他OO语言不同,JS中的“this”不是指当前的“实例”,而是指当前的“范围”。 这个页面比我更好地描述了“this”的用法: - )
  4. 我添加了一个额外的函数(getItems()) - 您现在可以使用

    获取项目数组

    myList.getItems()

答案 1 :(得分:1)

那段代码有点奇怪。

列表是JavaScript中的一个数组,列表中的每个项目都可以像对待它一样将其视为对象。

在您的示例中,groceryList是一个定义私有“方法”的对象。 JavaScript和许多其他编程语言中的约定是将“类”命名为UpperCamelCase,因此groceryList是GroceryList。

在“函数”中,GroceryList this表示对象本身,因此您可以附加this.addStuff = function ...或“属性”this.items = []等函数。数组变量总是将它们称为复数,因为它们包含一组东西。

this.items是杂货的数组(列表),每个杂货店有3个属性:foodquantityprice。您可以使用数组方法this.items.push(grocery)将它们添加到数组中,其中杂货是杂货对象。

var GroceryList = function() {
    this.items = []; // array to store groceries

    // add to object method to add groceries to list
    this.addStuff = function(food, quantity, price) {
        this.items.push({
            food: food,
            quantity: quantity,
            price: price
        });
    };
};

var groceryList = new GroceryList();
groceryList.addStuff('cookie', 2, 1.00);
groceryList.addStuff('brownie', 1, 2.50);

console.log(groceryList.items);

这个“班级”中没有任何私密内容。别担心。

小提琴与http://jsfiddle.net/42cna2d3/一起玩。