javascript - 在 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
解决方案
我想你可能对这里发生的事情有点困惑。请记住,返回的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);
推荐阅读
- node.js - 在nodejs mysql async/await中运行多个查询
- azure-functions - InvalidSignature:令牌的签名无效 - Azure 函数
- javascript - 浏览器和邮递员中的错误 401 未授权 ok
- javascript - 从自定义类型创建列表/数组
- python - 使用 opencv 保存裁剪的视频
- json - 创建一个字符串来调用带有角度 html 文件中的变量的 json 对象
- linux - 将多个 excel 文件合并到一个 excel 工作簿中,但使用 bash 脚本将不同的工作表合并
- python - 为什么我可以用 int(s[0]) + int(s[1]) 而不是 int(s[0] + s[1]) 添加数字?
- php - 根据 Woocommerce 中购物车中的运输类别价格项目更改运输类别
- html - 带有一个条件选项的两个 Select 元素(下拉菜单)