【问题标题】:How do I create Objects in Javascript, so I can later access their properties?如何在 Javascript 中创建对象,以便以后可以访问它们的属性?
【发布时间】:2016-12-18 16:04:59
【问题描述】:

我正在使用以下代码用对象填充数组:

    orders.push(getOrder(orderName, sender));
...
    function getOrder (orderName, sender){
    this.orderName = orderName;
    this.orderDate = new Date();
    this.sender = sender;

    console.log('Created order object.\n orderName: '+ orderName + '\n orderDate: ' + this.orderDate.getTime())}

稍后当我尝试访问数组中的对象时,我收到一条错误消息,提示“无法读取未定义的属性 'orderDate'”。这是我用来访问对象的代码:

dishEmitter.on('checkIfReady', function(){
    orders.forEach(function(order){
        console.log(order);
        var now = new Date();
        if(Math.abs((now.getTime() - order.orderDate.getTime()) / 1000) >= 5){
            broadcast('Your ' + order.orderName + ' is ready!', order.sender);
            orders.splice(indexOf(order),1);
        }
    })
})

我正在编写一个小示例应用程序来学习一点关于 nodejs 的知识。我要做的就是创建一个订单,5秒后,订单就准备好了(向订购的客户返回一些消息)

我上传了我的完整代码以防有人想看它(虽然有些字符串是德语):server.jsmensa.js

【问题讨论】:

    标签: javascript node.js javascript-objects


    【解决方案1】:

    getOrder 没有被用作构造函数,因此this 引用实际上指向的对象与返回的对象不同。将其更改为 function Order() 并改为使用 orders.push( new Order() ) 调用它:

    function Order(orderName, sender) {
    
        this.orderName = orderName;
        this.orderDate = new Date();
        this.sender    = sender;
    }
    

    用法:

    dishEmitter.on('order', function(orderName, sender){
        orders.push( new Order( orderName, sender ) );
    })
    

    【讨论】:

      猜你喜欢
      • 2021-11-23
      • 1970-01-01
      • 2022-01-22
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 2016-06-15
      相关资源
      最近更新 更多