【问题标题】:Defining a function of an object JavaScript定义对象 JavaScript 的函数
【发布时间】:2018-02-27 18:41:55
【问题描述】:

如何定义对象内的函数?

var CustomerDB = {customers:[], addresses:[], stores:[], insertData, addCustomer}

CustomerDB.insertData = function (objData){
    objData.forEach(function(element){
    if (element.type == "customer"){
        CustomerDB.addCustomer(element.data);
    };
    });
};


CustomerDB.addcustomer = function (customerObj){
    customerObj.add_date= new Date();
    CustomerDB.customers.push(customerObj);
};

CustomerDB.insertData(allData);
console.log(CustomerDB.customers);

我不断收到未定义 insertData 的错误。我需要做什么?

【问题讨论】:

  • var CustomerDB = {customers:[], addresses:[], stores:[]}
  • 如果我不在对象中声明方法,程序怎么知道函数属于对象CustomerDB?
  • 你已经这样做了:CustomerDB.insertData = function (objData){...。问题是您试图为 CustomerDB.insertData = insertData; CustomerDB.addCustomer = addCustomer; 做速记,但 insertDataaddCustomer 不是变量。

标签: javascript function object


【解决方案1】:

insertDataaddCustomer 是 CustomerDB 对象的属性,而不是您可以像尝试过的那样分配给 CustomerDB 的 function expressions。如果您从 CustomerDB insertDataaddCustomer 中删除这两个技术上未定义的变量(解释器目前只知道 addCustomer 和 insertData 作为 CustomerDB 的属性),那么它将正常工作:

var CustomerDB = {customers:[], addresses:[], stores:[]}

CustomerDB.insertData = function (objData){
    objData.forEach(function(element){
    if (element.type == "customer"){
        CustomerDB.addCustomer(element.data);
    };
    });
};


CustomerDB.addCustomer = function (customerObj){
    customerObj.add_date= new Date();
    CustomerDB.customers.push(customerObj);
};

CustomerDB.insertData(allData);
console.log(CustomerDB.customers);

使用分配给变量的函数的替代方法:

var insertData = function(objData) {
    objData.forEach(function(element){
      if (element.type == "customer"){
        CustomerDB.addCustomer(element.data);
      };
    });
};


var addCustomer = function(customerObj) {
    customerObj.add_date= new Date();
    CustomerDB.customers.push(customerObj);
};

var CustomerDB = {customers:[], addresses:[], stores:[], insertData, addCustomer}

CustomerDB.insertData(allData);
console.log(CustomerDB.customers);

最后一个花絮:这是 ES5 语法,我强烈建议您探索ES6

希望对你有帮助

【讨论】:

    【解决方案2】:

    ``

    如下所示重写你的代码

    var CustomerDB = {customers:[], addresses:[], stores:[]}
    
    CustomerDB.insertData = function (objData){
        objData.forEach(function(element){
        if (element.type == "customer"){
        CustomerDB.customers.push(element.data);
        };
        });
    };
    CustomerDB.insertData(allData);
    console.log(CustomerDB.customers);

    【讨论】:

    • “如下所示重写你的代码” - 想解释一下原因吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2014-03-28
    • 2021-07-07
    • 1970-01-01
    • 2021-01-17
    相关资源
    最近更新 更多