javascript - 如何使属性动态化(在执行代码之前未知)?

标签 javascript arrays mongodb meteor

这是我使用的数据格式:

ChecksCollection = new Mongo.Collection(null);
ChecksCollection.insert({
  oddsChecked: ['', ''],
  oddsAverages: ['', ''],
  oddsCompeting: ['', ''], 
  ...

dynamicProperty 可以是 'oddsChecked'、'oddsAverages'、'oddsCompeting' 等等。这取决于执行时间。如何使下面的代码正常工作?

var odds = ChecksCollection.findOne().dynamicProperty[index];

最佳答案

您可以使用 transform使用 Object.defineProperty 创建 setter/getter 的选项:

ChecksCollection.findOne({}, {
  transform: doc => Object.defineProperty(doc, 'dynamicProperty', {
    get: function getDynamicProperty() {
      // Your logic here
      // This should return a value (unless you want some obscure
      // side-effecting getter, which no you don't)

      if (this.something) {
        return 42;
      }
      else {
        return 53;
      }
    }
  })
);

只要不使用箭头函数(锁定this),就可以使用this 访问getter 所在的对象。

关于javascript - 如何使属性动态化(在执行代码之前未知)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35056352/

相关文章:

javascript - 为什么我的 React 组件导出不起作用?

javascript - 在对象数组中查找最小值并返回其他属性的最佳方法?

javascript - Mongojs:findOne() 不起作用

javascript - 如何获取客户端 Javascript 数组并通过 Node.js API POST 到 MongoDB 数据库?

javascript - 如何捕获 CKEditor 4 中对话框选项卡的更改?

javascript - 通知用户在 SPA 网站上刷新浏览器的正确方法是什么(当 .js 文件更改时)

Javascript:空对象是假对象吗?

java - 如何在java中创建新的字符串类型

arrays - Julia 中以 DataArrays 和 Arrays 作为参数的函数

javascript - MongoDB删除触发器查询