我正在创建一个注册产品的脚本,并且已经为每个脚本分配了一个唯一的代码,该代码是通过codeGenerator
函数生成的。
我想知道如何将这个函数作为原型传递,而无需调用该函数或多或少地分配我的代码:
Vacuum = registerProduct('LG - Vacuum Cleaner 3000','appliances','Super smart vacuum cleaner sucking: water, dust and souls','300')
返回对象:
APPLIANCES: Product {name: "LG - Vacuum Cleaner 3000", category: "appliances", description: "Super smart vacuum cleaner sucking: water, dust and souls", price: "R $: 300.00", code: "API- 01 "}
我更以这种方式获得相同的出口:
const productsRegistered = {}
console.log(productsRegistered.length);
const Product = function( name, category, description, price, code) {
this.name = name
this.category = category
this.description = description
this.price = 'R$: ' + price + '.00'
this.code = codeGenerator(this.category)
}
function codeGenerator(productCategory) {
let productCode = ''
if (productCategory.length <= 3){
productCode = productCategory
} else {
productCode = sliceWords(productCategory)
}
if (typeof productList === 'undefined') {
productCode += '-01'
} else {
productCode += '-0' + productList.length + 1
}
return productCode
}
function registerProduct( name, category, description, price ) {
productsRegistered[category.toUpperCase()] = new Product(name,category,description,price)
}
function sliceWords(word) {
code = ''
for(let n = 0; n <= 5; n += 2) {
code += word[n].toUpperCase()
} return code
}
Computer = registerProduct('HP - ALL IN ONE','Computers and Laptops','HP Computer Entel Core i10','1500')
Vacuum = registerProduct('LG - Vacuum Cleaner 3000','appliances','Super smart vacuum cleaner sucking: water, dust and souls','300')
console.log(productsRegistered);
您真正需要做的就是将productsRegistered
从数组更改为对象。如果您有数组,则在记录它们时这些条目将不可见,因为它们不在数组索引属性上。
由于registerProduct
不返回任何内容,因此不应将返回值分配给变量-而是检查productsRegistered
对象。
const productsRegistered = {};
const Product = function( name, category, description, price, code) {
this.name = name
this.category = category
this.description = description
this.price = 'R$: ' + price + '.00'
this.code = codeGenerator(productsRegistered)
}
function codeGenerator(productList) {
let productCode = ''
for (product in productList) {
let productCategory = productList[product].category
if (productCategory.length <= 3){
productCode = productCategory
} else {
productCode = sliceWords(productCategory)
}
if (productList.length === 0) {
productCode += '-01'
} else {
productCode += '-0' + productList.length + 1
}
} return productCode
}
function registerProduct( name, category, description, price ) {
productsRegistered[category.toUpperCase()] = new Product(name,category,description,price)
}
function sliceWords(word) {
code = ''
for(let n = 0; n <= 5; n += 2) {
code += word[n].toUpperCase()
} return code
}
registerProduct('HP - ALL IN ONE','Computers and Laptops','HP Computer Entel Core i10','1500')
registerProduct('LG - Vacuum Cleaner 3000','appliances','Super smart vacuum cleaner sucking: water, dust and souls','300')
console.log(productsRegistered);
或者,如果您确实希望产品在调用productsRegistered
的返回值中在registerProduct
对象和中可见,请将实例化的Product保存在变量中,以便您都可以将其分配给对象并返回:
const productsRegistered = {};
const Product = function(name, category, description, price, code) {
this.name = name
this.category = category
this.description = description
this.price = 'R$: ' + price + '.00'
this.code = codeGenerator(productsRegistered)
}
function codeGenerator(productList) {
let productCode = ''
for (product in productList) {
let productCategory = productList[product].category
if (productCategory.length <= 3) {
productCode = productCategory
} else {
productCode = sliceWords(productCategory)
}
if (productList.length === 0) {
productCode += '-01'
} else {
productCode += '-0' + productList.length + 1
}
}
return productCode
}
function registerProduct(name, category, description, price) {
const product = new Product(name, category, description, price);
productsRegistered[category.toUpperCase()] = product;
return product;
}
function sliceWords(word) {
code = ''
for (let n = 0; n <= 5; n += 2) {
code += word[n].toUpperCase()
}
return code
}
const computer = registerProduct('HP - ALL IN ONE', 'Computers and Laptops', 'HP Computer Entel Core i10', '1500')
const vacuum = registerProduct('LG - Vacuum Cleaner 3000', 'appliances', 'Super smart vacuum cleaner sucking: water, dust and souls', '300')
console.log(productsRegistered);
console.log(computer);
如果要使productsRegistered
对象的每个值都是一个数组而不是一个对象,则在该属性尚不存在的情况下,在该属性处创建该数组,然后将其推入:
const productsRegistered = {};
const Product = function(name, category, description, price, code) {
this.name = name
this.category = category
this.description = description
this.price = 'R$: ' + price + '.00'
this.code = codeGenerator(this.category)
}
function codeGenerator(productCategory) {
let productCode = ''
if (productCategory.length <= 3) {
productCode = productCategory
} else {
productCode = sliceWords(productCategory)
}
if (typeof productList === 'undefined') {
productCode += '-01'
} else {
productCode += '-0' + productList.length + 1
}
return productCode
}
function registerProduct(name, category, description, price) {
const product = new Product(name, category, description, price);
const key = category.toUpperCase();
if (!productsRegistered[key]) {
productsRegistered[key] = [];
}
productsRegistered[key].push(product);
return product;
}
function sliceWords(word) {
code = ''
for (let n = 0; n <= 5; n += 2) {
code += word[n].toUpperCase()
}
return code
}
const computer = registerProduct('HP - ALL IN ONE', 'Computers and Laptops', 'HP Computer Entel Core i10', '1500')
const vacuum = registerProduct('LG - Vacuum Cleaner 3000', 'appliances', 'Super smart vacuum cleaner sucking: water, dust and souls', '300')
console.log(productsRegistered);
console.log(computer);