console.log 输出中,i 代表什么?

问题描述 投票:0回答:1

我删除了由粗体按钮创建的星号,因为这似乎会让人们感到困惑。输出是直接从控制台复制的,一个对象前面有一个 i,而克隆则没有。

i 显然对fabric.js 表示重要的东西,因为fabric.js 不会将克隆识别为有效,即使它们在其他方面都是相同的。

所谓的重复和我的问题之间的区别:

  1. i在左边,是console.log输出中实际对象的一部分
  2. i在左边,蓝色信息图标在右边
  3. i 在未展开时显示,蓝色信息图标仅在展开时显示。
  4. i 不会悬停,蓝色信息图标会悬停。

我正在尝试克隆(按值)fabric.js 对象,当我 console.log() 两个对象时,其中一个对象前面有一个 i

old-objects i {_objects: Array(56), width: 350, height: 350, toBeParsed: false, minX: -0, …}

new-objects {_objects: Array(56), width: 350, height: 350, toBeParsed: false, minX: -0, …}

新对象是由

创建的
newo = Object.assign({}, o);

其中 o 是来自 canvas.getObjects() 的原始 Fabric.js (5.3) 对象

其他都一样。

使用 Object.assign 克隆对象

javascript canvas fabric
1个回答
0
投票

您在对象属性之前看到的

i
是该对象所属的类的名称。你可能想知道,“谁会命名一个类 i?”;好吧,根据所使用的库的上下文,它们可能不会,而且我也可能是该类的丑化/压缩/缩小版本。也就是说,该类的名称被替换为单个字符,以减少相关库的整体大小。

i
不会出现在克隆对象的属性之前,因为您不克隆类本身,而只是克隆其可见(如可枚举)属性。

您可以在控制台中轻松复制此操作,但我在下面添加了一个片段来说明:

class i {
    test1 = 'one';
    test2 = 'two';
}

Object.defineProperty(i, 'test3', {
  value: 'three',
  enumerable: false,
});

const j = new i();

console.log(j);

const k = Object.assign({}, j);

console.log(k);

复制此内容的第二种方法大致相同,但它涉及在执行代码之前缩小代码。

© www.soinside.com 2019 - 2024. All rights reserved.