JS-具有分配值的对象的属性变得不确定

时间:2020-03-19 01:21:09

标签: javascript object properties

我正在尝试在js中运行此代码

    function platform() {
       platform.list.push(this);
       //some more code
    }
    platform.lf = false;

,并且我已将所有平台实例存储在platform.list中。但是当我尝试这样做时:

    console.log(platform.list[0].lf);

我不确定吗?有什么帮助吗? (我确实有一个平台对象实例)

2 个答案:

答案 0 :(得分:0)

这是您要尝试做的吗?在代码段上看起来如何正常运行?您是否忘记在您的“ //更多代码”部分中初始化了lf(this.lf = ...),您没有将其发布?

附带说明-platfrom.lf和您要访问的属于类实例的lf完全不同。

test.list = []

function test()
{
  test.list.push(this);
  this.x = Math.random();
}

a = new test();
b = new test();

console.log(test.list.length);
console.log(test.list[0].x);
console.log(test.list[1].x);

答案 1 :(得分:0)

这可能是您需要学习的内容。如果要创建构造函数(由于私有变量的原因,我现在推荐使用它而不是类),它不是对象,直到您对其调用new

function Platform(){
  const a = ['lame', 1, 'test']; // private array
  this.lf = true;
  this.testFunc = ()=>{
    // no arguments array in an arrow function
    console.log(a);
    return this; // for property chaining
  }
}
function Platforms(){
  this.list = [];
  this.addPlatform = function(){
    this.list.push(...arguments);
    return this;
  }
}
const pf = new Platforms, np = new Platform;
np.lf = false;
pf.addPlatform(new Platform, new Platform, np);
pf.list[0].lf = false;
console.log(pf.list); np.testFunc();

您可能还会喜欢这种设计:

function Platform(){
  this.lf = true;
}
function Platforms(){
  this.list = [];
  this.addPlatform = function(){
    this.list.push(new Platform);
    return this;
  }
}
const pf = new Platforms;
pf.addPlatform().addPlatform().addPlatform();
pf.list[0].lf = false;
console.log(pf.list);