【问题标题】:Writing jQuery-style function chains in AS3 and other class-based languages用 AS3 和其他基于类的语言编写 jQuery 风格的函数链
【发布时间】:2013-02-09 23:39:24
【问题描述】:

这不是我遇到的具体问题,我可以做出更多选择,但我确实相信这个问题与 SO 相关,因为可能存在“正确”的 OO 答案,以及性能收益/损失这样做。我正在使用 AS3,但我相信这个问题与其他基于类的/oo 语言有关。

我试图想办法为具有不同参数的类提供 Java 风格的多个构造函数(这是另一个故事),但这让我想到了 jQuery,以及它如何通过让函数尽可能地返回来链接函数他们被调用的对象。

它并不总是用 jQuery 写出最简洁的代码,我想这是一种与经典方法不同的做法,但我想知道 对于这种方法是否有什么要说的:

//execute chains of methods on creation, as each returns its parent class (person)
var person:Person = new Person().male('a male', 25).wakeUp().lookAround();

//Or later
person.getUp().rubEyes();

...所有成员函数都返回一个通常不需要的对象是否代表任何重大浪费/性能问题?

这似乎是一种保存代码并以更易读的方式表示函数序列的好方法,我想知道是否有人可以提供帮助。

提前致谢

【问题讨论】:

  • 你可能想了解Fluent Interfaces
  • 谢谢,有趣的阅读——它并没有说明代码性能,我猜返回值只是一个参考,不管它是什么类型。我认为这会更常见,但它很整洁。

标签: jquery flash oop coding-style chaining


【解决方案1】:

是的,person.getUp().rubEyes() 有话要说:语义上看起来更好。就是这样。

new Person().male('a male', 25) 是完全不同的情况。 Male 不是 getUp 之类的动词。我更喜欢:new Person({ gender: 'male', age: 25})

不使用返回的对象时是否会对性能造成重大影响?不。首先,大多数(jit)编译器足够聪明,可以确定返回的对象从未使用过,因此根本不会执行这些指令。这是一种称为死代码消除的优化策略。其次,即使编译器不会执行这种优化,我们仍然在谈论一些微不足道的时钟周期。没有什么你应该担心的。一般来说,我建议您根本不要担心这些性能问题。更好地将优化工作集中在编译器无法帮助您处理的代码部分(即设计、算法等)上。

玩得开心!

【讨论】:

  • 有趣的答案 - 我当然也能看到你关于动词/动作的观点。我猜想,即使没有消除死代码,在像 AS/JS/Java 这样的语言中返回的也只是一个指针,指向的对象的大小是无关紧要的。
猜你喜欢
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多