问题标签 [object-properties]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
reactjs - 选择正确的枚举类型来访问对象嵌套属性
这对我来说很常见,但我并没有偶然发现简单的解决方案。
我有以下枚举(每个枚举都有更多值,但为了简单起见,我将它们缩减为两个。另请注意,每个枚举中的相同枚举键和值只是修剪的结果,而不是特定情况) :
然后我有使用这些枚举的对象,如下所示:
当我尝试访问适当的图标进行人员升级时出现问题
显然打字稿编译器无法确定upgrade
用于访问特定图标是否正确,CampPersonUpgradesIcons[person]
因为它可以是HealerUpgrades
,MerchantUpgrades
或TutorUpgrades
。
显然,对于人类(不是打字稿)来说,什么时候person
是从. 我的问题是告诉打字稿编译器for将匹配适当的枚举的最简单方法是什么(不使用像or之类的条件类型)。CampPersons.HEALER
upgrade
HealerUpgrades
upgrade
person
upgrade extends HealerUpgrades ? HealerUpgrades : ...
//@ts-ignore
编辑:我在我的 React 组件中使用了@jcalz 答案,但不幸的是我在这个操场上遇到了进一步的问题
php - 如何在变量中传递数组索引或嵌套对象属性
我正在尝试传递存储在变量中的关联数组的索引:
我试图在对象中做同样的事情:
如何正确使用变量来访问上面示例中提到的值?注意:将它们包装到大括号中(即复杂的语法)在这两种情况下都不起作用。
excel - 粘贴到 Excel ActiveX 组合框
我正在尝试将数据从一个工作簿复制到另一个作为调查构建的工作簿中。
在调查表中,我们将 ActiveX 控件用于组合框和复选框。我留下了两种我尝试过(但失败了)的方法样本。
编辑:当使用下面的副本在同一个工作簿中工作时,我已经能够获得要粘贴的对象。我不明白为什么在文档之外工作时它不成功。
javascript - 使用点符号访问类或对象之外的对象属性?
所以这可能很简单,我可能理解错了..
我在我的代码中创建了具有 x、y 和 z 参数的类和函数。
我见过这样使用的代码-
但是我不能使用任何东西访问类之外的任何值,例如..
它总是说未定义或不起作用。我已经尝试在函数和类上使用这种点表示法,但没有任何效果,例如,如果我将控制台日志放在类中,我只能用 (x) 来记录这些值。
请有人详细说明我将如何使用 ship.x -enemy.x 的示例来访问这些属性。
谢谢
javascript - JavaScript - 代理集与 defineProperty
我想构建一个检测对象更改的代理:
- 定义了新属性。
- 现有属性已更改。
代码示例 1 - defineProperty
代码示例 1 - 观察
proxy
有一个属性name
,这是我所期望的。- 更改
name
属性告诉我name
已定义;不是我所期望的。 - 定义
age
属性告诉我age
已经定义了;正如我所料。
代码示例 2 - 设置
代码示例 2 - 观察
proxy
有一个属性name
,这是我所期望的。- 更改
name
属性告诉我name
已更改;正如我所料。 - 定义
age
属性告诉我age
已经改变了;不是我所期望的。
问题
- 为什么
defineProperty
捕获属性变化? - 为什么要添加
set
overridedefineProperty
? - 如何让代理正确捕获
defineProperty
新属性和set
属性更改?
angular - 类属性变得未定义
我正在学习 Angular,作为第一个项目,我正在尝试制作一个网页来下棋。
为此,我制作了两个具有各自类的组件:SquareComponent 和 BoardComponent。
SquareComponent 类具有以下属性:
一个板,它是 BoardComponent 类的一个对象,因为稍后我需要访问它的一些属性。它有颜色,知道我应该把它画成浅色还是深色。它上面有棋子的信息以及它属于谁,所以它是 Pawn 还是 Rook 或其他什么,以及它是属于白色玩家还是黑色,或者方格中根本没有棋子。
最后,我最感兴趣的一点是,它有一个文件和一个等级,如果你不知道它在国际象棋中是如何工作的,它基本上是正方形的坐标。(我将在后面解释最后两个属性)。
这将是我的 BoardComponent 类:
它有一个 SquareComponent 类的对象数组(棋盘中的 64 个方格),一个布尔值,它告诉我轮到哪位玩家,以及获胜者。对于游戏的逻辑,如果每个方格都知道它在 BoardComponent 类中的数组中的索引位置,那将很有用squares
,最后一个属性的解释将留待以后讨论。
使用我设置的模板和我描述的属性,我已经成功地使 Angular 绘制了一个包含所有初始棋子的棋盘(这是 BoardComponent 类的延续):
这里的函数placeInitialPieces()
使用方格的等级来识别一些方格来放置棋子并将棋盘的那一侧分配给玩家:
现在,为了游戏的逻辑,我想让你点击其中一个棋子,它会选择它,然后用浅蓝色突出显示它。然后,它可以移动的方块将以黄色突出显示,然后单击黄色方块以移动棋子。
或者,如果您错过了一个片段,您应该能够再次单击它以取消选择它,或者单击另一个片段来选择那个片段。
为此,我在selected: boolean
SquareComponent 类中创建了属性,并且我还需要 BoardComponent 类知道当前选择了哪个正方形,这就是我selectedSquareIndex
在 BoardComponent 类中定义属性的原因,该类最初设置为-1
. 当您单击一个正方形时,它会转到以下select()
功能:
这是我的问题出现的地方:
当我在函数中打印对象时,select()
properties和简单地消失了,即使我之前使用 rank 放置块,如果我在创建后打印正方形数组,所有属性都在那里。我可以选择和取消选择一个正方形,但我不能交换它们(在语句中),因为当我使用这个方法时,正方形的索引不是一个定义的属性。rank
file
index
else
PD:有一些方法,如 getter、setter deleteSelection()
,它们不在这里,但它们并不重要。但是,如果您想看到它们,可以询问。
如果您想查看整个内容并对其进行测试或审查,我也可以将我的代码发布到 GitHub 或其他地方。
javascript - Javascript复制对象内的属性
我有一个对象如下;
现在我希望将所有这些属性复制到“记录”内的“行”属性中。所以,它应该看起来像;
虽然我可以使用
我想要的是
- 属性 prop1/prop2/prop3 在将它们复制到 record.row 后作为“记录”的直接子级删除
- 上面的语句也最终重复了我想避免的行内的属性(某种圆形的东西)
我怎样才能满足这两个条件?PS:“propX”都是简单的字符串值,我可以用深/浅拷贝
javascript - 为什么我们不能使用普通的 for 循环来打印 javascript 对象?
我正在学习 JavaScript,所以今天我发现要打印或获取对象属性,使用了 for..in 循环。但我在这里感到困惑,因为我以前没有见过 for..in 循环。所以我遇到了一个查询,为什么我们不能在 JavaScript 中使用 for 循环来打印对象属性?这个 for..in 循环是如何工作的?这是一个例子。
并打印这个每个人都建议
我的问题是这个循环是如何工作的,以及为什么这个循环用于打印属性。