- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我引用最近的Google JavaScript Style Guide :
Do not use JavaScript getter and setter properties. They are potentially surprising and difficult to reason about, and have limited support in the compiler. Provide ordinary methods instead.
Exception: when working with data binding frameworks (such as Angular and Polymer), getters and setters may be used sparingly. Note, however, that compiler support is limited. When they are used, they must be defined either with
get foo()
andset foo(value)
in the class or object literal, or if that is not possible, withObject.defineProperties
. Do not useObject.defineProperty
, which interferes with property renaming. Getters must not change observable state.Illegal:
class Foo {
get next() { return this.nextId++; }
}
这是 Google 的意见,但我想真正了解原因。
首先,我认为支持有限的 “编译器” 是 Babel/Traceur/TypeScript?还是某些 ES5 引擎缺乏支持?
此外,我想了解一下作者认为的“令人惊讶和困难”的原因是什么。我看到了这些限制:
Object.assign()
不复制 getter,而是执行它们并复制值;get name()
语法,不可能向现有对象添加 getter。对于现有对象,必须使用 Object.defineProperty
。let that = this
。我不明白声明:“Object.defineProperty
interferences with property renaming”。 (什么是“属性重命名”?)
最佳答案
我猜他们的意思是:
"[potentially] surprising":
具有 getter 和 setter 的属性不一定像普通属性一样。因此,他们违反了 principle of least surprise .假设您有一个属性,如果分配给它的值为负数,则该属性返回 0:
myObj.prop = -7;
expect(myObj.prop).to.equal(-7); // fails
"[potentially] difficult to reason about":
出于类似的原因。具有 getter 和 setter 的属性不一定像普通属性那样工作,这意味着您不一定能像对待普通属性那样对它们进行推理。
假设我们再次拥有上述属性。您不能执行以下操作:
myObj.prop = -7;
console.log(myObj.prop * 9);
// use substitution to figure out the result of the above statement:
console.log(-7 * 9); // substitute -7 for myObj.prop
console.log(-63); // wrong - the above actually logs 0
关于属性重命名:根据this question ,Closure 编译器中的优化器尝试重命名(缩小)属性名称,但它会通过重命名对它们的引用而不是更新 .defineProperty()
调用以不完整的方式这样做。使用 .defineProperties()
允许优化器正确重命名属性。
关于javascript - ES5 getters 和 setters 是 "potentially surprising and difficult to reason about",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42331251/
即使图中没有循环,BGL 的 depth_first_search 算法有时也会对访问者调用 back_edge()。根据后边缘的定义,以及根据 Boost 的 DFS Visitor Documen
所以,我有一个可以从大约四个不同函数调用的例程。我想要做的是遍历可能调用此例程的路线。 我正在使用 Eclipse。我认为这一定是有可能的,因为我知道我可以手动完成此操作,尽管速度很慢。 最佳答案 在
Xcode 的分析器提示存在“对象的潜在泄漏”。以下方法中的第一行被突出显示: - (void)retrieveBeginRestoreData { self.restoreContext =
我目前正在扩展 lavalamp plugin在下拉菜单上工作,但我遇到了一个小问题。我需要知道隐藏元素的 offsetWidth。现在显然这个问题没有意义,而我正在寻找的是元素的 offsetWid
在“窗口”>“首选项”>“常规”>“搜索”下,有“忽略潜在匹配项”选项 它有什么作用?无论我是否激活它,我都看不出有什么区别。 它是一个仅对 Java 开发有意义的选项(我从不这样做,但我确实使用 E
当我运行以下函数时,出现此错误: “错误:潜在的无限循环。” 问题似乎是我在拼接方法中使用的“0”,因为当我将其更改为任何其他数字(1 - 9)时,我不会收到此错误。 我不确定这将如何创建无限循环。
我有一个 Web API 项目。我的端点之一允许进行字符串搜索,其中可能包含特殊字符。 [RoutePrefix("api/Search")] [ValidateInput(false)] // th
嗨, 我运行了 XCode 分析器 - 它告诉我以下两者都是潜在的内存泄漏。我不知道为什么。我像这样声明了 midiDevices @property (assign, nonatomic) NSMu
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: A potentially dangerous Request.Form value was detected fr
我需要解决一个编译器发现的错误——我理解为什么它会发现那个错误但需要解决它因为函数(抛出错误)只会在指针是 已初始化。 这是我的伪代码: if (incoming_message_exists) {
在调用 isDataMatchingnamespace 时,我得到了 this 的潜在无效用法如何克服以及如何以正确的方式调用 isDataMatchingnamespace? function Cl
documentation for the Cwd module声明 fast_abs_path是“更危险但可能更快的 abs_path 版本”。它以什么方式危险?什么情况下比较快?行为是否因平台而异
MSVC 对潜在未初始化变量的警告并不是特别好,特别是它错误地声称 i 可以在此程序中未初始化: #include enum class Color{ Red, Green }; in
我的实体 Item 有一个存储库 (ItemRepository),函数为 findItemCount()。当我使用 $repository = $em->getRepository(Item::cl
我的实体 Item 有一个存储库 (ItemRepository),函数为 findItemCount()。当我使用 $repository = $em->getRepository(Item::cl
我的 Eclipse 发出以下警告: Potential resource leak: '' may not be closed ...对于表达式 new BufferedWriter(...)在下面
您认为解决以下问题时的最佳实践是: MyClass myVariable = null; if ( ..condition 1.. ) { myVariable = new MyClass(1);
创建 Funds 时或 Assets表,我经常遇到同样的问题:不是全部Assets具有相同的标识符。 例如:70% 有 ISIN ,有些有彭博代码,有些两者都有,有些只有 AccountingID来自
我遇到了错误 A potentially dangerous Request.Form value was detected from the client 当我部署我的应用程序时(当我通过本地主机运
使用 this 中的一些指导在关于理解决策树结构的 scikit-learn 教程中,我的想法是,也许查看两个连接节点之间发生的特征组合可能会提供一些关于潜在“交互”术语的见解。也就是说,通过查看给定
我是一名优秀的程序员,十分优秀!