属性定义是使用knockout时的方法定义

时间:2013-08-22 16:38:07

标签: javascript knockout.js v8 google-style-guide

根据Google style guide,应该在构造函数的原型上定义方法,并且应该使用this关键字在构造函数中定义属性。

我使用Knockout进行大部分前端开发,Knockout通过将属性转换为函数来处理属性。也就是说,我的所有属性现在都是方法,或多或少。这是一次重大的性能打击吗?是否有使用JavaScript getters and setters的任何淘汰赛解决方法?

1 个答案:

答案 0 :(得分:1)

首先,是的,有一个使用getter和setter的knockout插件,但它只适用于较新的浏览器。你牺牲了IE8的兼容性< (这是不可避免的,因为那些浏览器不支持javascript getter / setter)。 The plugin can be found here

关于你的要点:理解风格指南意图很重要。因为方法通常是可重用的,所以将它们放在原型上可以节省重复的代码和内存分配。这就是为什么建议将它们放在原型上。但是,淘汰观察者不可重复使用。它们的行为类似于属性:它们存储特定于实例的信息。这种差异很重要。它们可能功能,但它们被视为属性

Google风格指南根本无法解决此问题。将它们放在实例上并不是性能损失,因为您将它与无法正常工作的方案进行比较。将observable放置在原型上会破坏模型。做唯一有效的方法不是性能打击。

作为最后一点,getter和setter插件不会使函数消失,它只是将它们隐藏在getter和setter之后。性能不会提高,因为仍然需要完成相同的工作。