首页 > 解决方案 > 在 JavaScript 函数中添加动态属性

问题描述

通过 Google,我了解了如何在对象中添加动态 javascript 属性,但在这里我的目标有点不同。

我已经尝试过使用此代码,但它给了我undefined.

var infoObj = {
  first: "John",
  last: "Doe"
};


function DD() {

  var me = this;
  // because my infoObj will available after x amount of time. (API)
  setTimeout(function(){
  
    Object.keys(infoObj).forEach(function(key) {
      me[key] = infoObj[key]
    });
    
  },2000)
  
  return me;
}

console.log(DD.first)
//undefined

标签: javascript

解决方案


我想你可能对这里发生的事情有点困惑。请记住,返回的DD是一个函数。不是infoObj。所以从一个未运行的函数中获取一个自定义属性总是会给你未定义的。

如果你要运行它 ( DD()),你会得到错误Cannot read property 'first' of undefined。那是因为你没有在DD.

最后,回想一下,this指的是全局对象,在这种情况下,是“本地全局”对象,这被认为是不好的做法(我知道这只是一个学习练习,但我正在给你一个完整的回顾)。最好将这些属性移动到一个新的对象上(例如var me = {}

我会尝试这样的事情:

function DD() {
  var me = {};

  Object.keys(infoObj).forEach(function (key) {
    me[key] = infoObj[key];
  });
  return me;
}

console.log(DD().first);


推荐阅读