javascript中定义后如何获取对象成员值

How to get an object member value after it is defined in javascript

我在 javascript 中有一个对象:

var a = {
    n1: 1,
    n2: 2
}

我想获取a.n3的值,但是n3稍后会添加到对象中。

如何在不使用任何循环并导致任何错误的情况下获取 n3 的值?

编辑

对象 a 是一种容器,来自不同范围的不同脚本正在异步添加变量(我正在使用 requireJS 来维护脚本)。

我的一个脚本 init.js 期望从对象中获取 属性 n3,但是 属性 n3 被添加到对象中一个不同的脚本 swatchRenderer.js,不幸的是,在 init.js 之后被称为 。因此 init.js 脚本没有得到值 n3

那么有什么方法可以阻止 init.js 中值的获取。

注意:我无法更改脚本的加载顺序。

如果对象 a 中不存在,a.n3 的值将是 undefined。因此,您可以使用 if 条件来防止错误。

var a = {
    n1: 1,
    n2: 2
}

if(a.n3){
  console.log('value found first');
}
a.n3 = 10;
if(a.n3){
  console.log('value found second');
}

但是假设 n3 是一个 boolean 值,那么这个 if 条件将不起作用,所以最好的方法可能是检查类型 undefined ,

var a = {
    n1: 1,
    n2: 2
}

if(typeof a.n3 !== 'undefined'){
  console.log('value found first');
}
a.n3 = false;
if(typeof a.n3 !== 'undefined'){
  console.log('value found second');
}

var value = a.n3;

如果value没有定义,那么n3还没有定义,如果定义了,那么你得到的就是value。

如果你想 运行 一个函数在它被改变时给定 n3 的新值,一个选择是使用 getter/setter:

const a = {
  n1: 1,
  n2: 2,
  get n3() {
    return this._n3;
  },
  set n3(val) {
    this._n3 = val;
    console.log('saw change, new val: ' + val);
  },
};
console.log('start');
a.n3 = 'foo';
console.log('end');

但这通常不是什么值得依赖的东西——当对象改变时触发外部的东西会更好。

更多 details/examples MDN

使用JavaScript的这个功能(这只是例子)

function resolveAfter2Seconds() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('resolved');
    }, 2000);
  });
}
var obj = {
 n1: 2,
 n2: 3
}
async function asyncCall() {
  console.log('calling');
  var result = await resolveAfter2Seconds();
  console.log(result);
  if (obj.n3) {
    console.log("obj.n3 found");
     //Here do your task
     return;
  }else {
   asyncCall();
  }
  // expected output: "resolved"
}

asyncCall();

既然你说你的脚本首先加载。你可以做什么它每隔 x 秒继续获取值,直到找到值。

例子

var fetchN3 = function () {
    if (obj.n3 === undefined){
        return setTimeout(function() {
            fetchN3();
        }, 500);
    }
    console.log("Found N3!!!", obj.n3);
}