我正在尝试学习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);
答案 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)版本。
您的代码问题:
我添加了一个额外的函数(getItems()) - 您现在可以使用
获取项目数组myList.getItems()
答案 1 :(得分:1)
那段代码有点奇怪。
列表是JavaScript中的一个数组,列表中的每个项目都可以像对待它一样将其视为对象。
在您的示例中,groceryList是一个定义私有“方法”的对象。 JavaScript和许多其他编程语言中的约定是将“类”命名为UpperCamelCase,因此groceryList是GroceryList。
在“函数”中,GroceryList this
表示对象本身,因此您可以附加this.addStuff = function ...
或“属性”this.items = []
等函数。数组变量总是将它们称为复数,因为它们包含一组东西。
this.items
是杂货的数组(列表),每个杂货店有3个属性:food
,quantity
和price
。您可以使用数组方法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/一起玩。