对象在分配执行之前分配操作对象。怎么样?

时间:2018-05-16 09:47:27

标签: javascript

我遇到了一个非常奇怪的问题,让我感到困惑,我不得不问问发生了什么。

这段简短的代码片段或多或少都是从我的代码中直接复制的。

<script>
    Vertices    = { Vertex  : { numComponents: 2, data: [], }   }
    console.log(Vertices)

    Matrices = new Float32Array(16*4);
    Matrix = new Float32Array(Matrices.buffer, 1 * 16 * 4, 16);

    Object.assign(Vertices,
    {
        InstanceMatrix  :   { numComponents: 16, data: Matrices, divisor: 1 },
    } );

    console.log(Vertices)
</script>

现在,令我难以理解的是这两个命令的输出。

最上面一个输出:

{Vertex: {…}}
InstanceMatrix: {numComponents: 16, data: Float32Array(64), divisor: 1}
Vertex: {numComponents: 2, data: Array(0)}
__proto__: Object

最底层的一个:

{Vertex: {…}, InstanceMatrix: {…}}
InstanceMatrix: {numComponents: 16, data: Float32Array(64), divisor: 1}
Vertex: {numComponents: 2, data: Array(0)}
__proto__: Object

顶级console.log命令如何在对象“顶点”中显示“InstanceMatrix”,尽管它是在日志命令之后分配的?

附带问题:为什么底部实际上与最高层不同?

谢谢!

1 个答案:

答案 0 :(得分:0)

这只是控制台的一个怪癖。您看到的第一行(toString())是对象的var indexSettings = new IndexSettings { NumberOfReplicas = 0, // If this is set to 1 or more, then the index becomes yellow. NumberOfShards = 5 }; indexSettings.Analysis = new Analysis(); indexSettings.Analysis.Analyzers = new Analyzers(); indexSettings.Analysis.TokenFilters = new TokenFilters(); var customAnalyzer = new CustomAnalyzer { //CharFilter = new List<string> { "mapping " }, Tokenizer = "standard", Filter = new List<string> { "lowercase", "asciifolding" } }; indexSettings.Analysis.Analyzers.Add("customAnalyzerLowercaseSynonymAsciifolding", customAnalyzer); 方法的结果,正如您所期望的那样,它在被调用时捕获对象的状态。下面打印的细节来自控制台,它们是“实时”的,即它们总是反映出现在的物体状态。