如何将原型函数传递给我的对象而无需调用它?

问题描述 投票:1回答:1

我正在创建一个注册产品的脚本,并且已经为每个脚本分配了一个唯一的代码,该代码是通过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);
javascript object prototype
1个回答
0
投票

您真正需要做的就是将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);
© www.soinside.com 2019 - 2024. All rights reserved.