【问题标题】:Extending Prototypes on Knockout Objects在 Knockout 对象上扩展原型
【发布时间】:2013-09-04 19:01:16
【问题描述】:

我有一个关于作为 Knockout Objects 原型的函数的一般性问题。目前,我很幸运使用以下方法来扩展对象的原型,但是我很好奇这样做会遇到什么好处和/或陷阱。

ko.utils.extend(objectModel.prototype, {
    makeAlert: function() {
        console.log('alert');
    },
    makeWhoopie: function() {
        console.log('whoopie');
    },
});

另一种方式是常见的js方法

objectModel.prototype.makeAlert = function() { console.log('alert'); }
objectModel.prototype.makeWhoopie = function() { console.log('whoopie'); }

我使用 ko.utils.extend 方法的唯一其他方法是在实现验证时。

问题:用于扩展原型的淘汰工具方法是否会带来任何认为不必要的额外开销?有没有首选的方法?我这样做喜欢将我的方法与我的 observables 分开。

【问题讨论】:

  • 你检查过ko.utils.validation的source吗?
  • 不错的链接,但这与我的问题无关。
  • 嗯,“验证”一词在 @nemesv 的评论中放错了位置,但链接似乎很有用:ko.utils 中的 extend 方法看起来根本不会带来太多开销,回答你的两个问题中的第一个。
  • 只是想就这个话题达成共识......到目前为止一切都很好。这种模式在我所有的 ko 声明的封闭性和简洁性方面效果很好。

标签: knockout.js prototype extending


【解决方案1】:

只需设置此jsperf test。老实说,我对结果感到有些惊讶。但是请记住,这里的性能差异几乎可以忽略不计,尤其是当您只执行一次时。我更喜欢$.extend,因为它比ko.utils.extend 短,而且我更喜欢使用 .extend 方法,因为它使代码更易于阅读。

所以回答你的问题:

用于扩展原型的淘汰工具方法是否会带来任何认为不必要的额外开销? Apparently not

有没有首选的方法? Matter of opinion. Given the performance difference is negligible, I'd go with the way that is more human readable.

【讨论】:

  • 在各种方法上运行 jsperf 的好主意。我有不止一个原型扩展,所以看看我的本地环境中的差异很有趣,看看从 ko.utils.extend 切换到 $.extend 是否有足够的收益。如果我有机会在您设置时为针对 jsperf 的测试构建一个更强大的模型,我一定会发布它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多