我遗漏了一些背景信息,但我认为其中很多内容都是不必要的。我有一堆代码导致一个具有 prop
属性的对象。然后,我设置一个 $scope.$watch
来监视该对象,然后,本质上是广播 prop
- 属性的名称,以及 newValue[prop]
,该属性的值。它看起来有点像这样:
$scope.$watch(function(){return object;}, function(newValue, oldValue) {
for (var prop in object) {
if (newValue[prop] !== oldValue[prop]) {
$scope.$broadcast('from-parent', {a: prop, b: newValue[prop]});
}
}
};
广播消息 console.log()
的 Object {a: (属性的名称), b: (属性的值)}
如您所愿会期望。
奇怪的是,当我删除 a:
和 b:
键时,即
$scope.$broadcast('from-parent', {prop, newValue[prop]});
我收到 Uncaught SyntaxError: Unexpected token [
错误。
是否不允许在对象中通过括号引用属性?这是怎么回事?
最佳答案
{prop, newValue[prop]}
不会使用 prop
变量中的名称创建属性,它最终会成为无效的对象初始值设定项 - 而不是因为 []
({prop, "foo"}
也会失败),但因为对象初始值设定项不能那样工作。
...the name of the property, and newValue[prop]
要从变量为对象提供属性名称,在 ES5 中,您必须首先创建对象,然后添加属性:
var obj = {};
obj[prop] = newValue[prop];
$scope.$broadcast('from-parent', obj);
在 ES6 中,您将能够使用新的动态属性名称表示法:
// REQUIRES ES6!
$scope.$broadcast('from-parent', {[prop]: newValue[prop]});
关于javascript - 在对象内使用方括号 : Unexpected Token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30253832/