【问题标题】:How to add prototype property to existing object如何将原型属性添加到现有对象
【发布时间】:2017-01-12 14:32:22
【问题描述】:

我的数组中的对象很少,我想将一些道具从工厂添加到类型为日期的对象。

我不需要从此对象中删除旧值。我尝试这样做:

  angular.forEach($scope.things, function(item) {
    if(item.type === 'date') {
      item = DateFactory.prototype.createFactory();
    }
  })

但它不起作用,我错在哪里? Plunker example

【问题讨论】:

  • 什么是createFactory?为什么要从原型中调用方法?
  • 在这种情况下,首先使用工厂是一个错误,因为这个工厂创建/返回类(不是类的实例)。更准确地说:每次调用这个工厂时,都是同一个静态/不变类的新化身。您可能想要在代码示例中做的是某事。更像$scope.things = $scope.things.map(item => item.type === 'date'? Object.assign(new DateClass(), item): item) 但要使其工作,您必须更改代码以提供DateClass 而不是每次调用时都会创建新日期类的工厂。
  • DateFactory.prototype.createFactory() 方法完全没有意义;既不存在也不知道它做了什么。
  • @Thomas 是的,你说得对,谢谢你给我解释一下)

标签: javascript angularjs arrays object frontend


【解决方案1】:

forEach 中更改item 不会改变该项目。您需要改用obj[key]

angular.forEach($scope.things, function(item, key, obj) {
    if(item.type === 'date') {
      obj[key] = DateFactory.prototype.createFactory();
    }
  })

更新plunker

此外,您应该从工厂返回日期对象的实例:

return new date();

..然后只需调用方法:

obj[key] = DateFactory.createFactory()

【讨论】:

  • 是的!有用!伊万,我可以将以前的参数保存在对象中吗?例如“名称”和“类型”?
  • @YoroDiallo 当然。您可以简单地将所有新属性附加到 item 或将它们包装在例如item.date 像这样:obj[key].date = DateFactory.createFactory();
【解决方案2】:

对于原型的链接,请使用以下语法:-

item = Object.create(Date);

【讨论】:

  • 但是如何使用 angular factory 来制作它?
  • 你只需通过 DateFactory 来创建方法。像 item = Object.create(DateFactory);
  • 不幸的是它不起作用.. ` if(item.type === 'date') { item = Object.create(DateFactory); }`,对象不变
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
相关资源
最近更新 更多