JavaScript中辅助函数的推荐方法是什么?


10

推荐的辅助功能方法是什么?我想选择一种技术,然后运行它来创建我的新“类”。

这是我所考虑的设计选项:

选项1:外部范围内的Helper函数,使用实例的上下文进行调用

function createPane (pane) {
    // logic to create pane
    var proto = Object.create(this.paneList);
    $.extend(paneProto, pane);
    return paneProto;
}

Panes.prototype.initialize = function (panes) {
    var _this = this;
    _.each(panes, function () {
        _this.panes.push(createPane.call(_this, this));
    });
}
  • 优点:简单的语法。createPane未在实例上发布。
  • 缺点: createPane在其他范围内均可访问。

选项2:关闭时的Helper函数,使用实例的上下文进行调用

Panes.prototype.initialize = (function () {

    function createPane (pane) {
        // same logic as last createPane
    }

    return function (panes) {
        // same logic as before - calls createPane
    }

})();
  • 优点: createPane未在实例上发布。
  • 缺点:可读性和可测试性较低;此助手的测试必须在初始化范围内进行。

选项3:在_前面加上名称以表示私有方法

Panes.prototype._createPane = function (pane) {
    // same logic as last createPane
}

Panes.prototype.initialize = function (panes) {
    // same logic as last, except calls this._createPane
}
  • 优点:_createPane实例的隐式上下文。来自外部的可测试性。
  • 缺点:在实例上公开辅助函数。

选项4:辅助功能用作参数

Panes.prototype.initialize = (function (createPane) {

    return function (panes) {
        // same logic as before - calls createPane
    }

})(function createPane () {
   // same logic as last createPane
});
  • 优点: createPane未在实例上发布。辅助函数之间无法相互访问。
  • 缺点:可读性和可测试性较低;此助手的测试必须在初始化范围内进行。

Answers:


4

首先JavaScript没有Classs

第二,您的第三个选择对我来说似乎更合理,但这也高度取决于您的要求。同样,您不必担心公开辅助功能。解决方案的优点完全可以让我妥协。

第三,您作为开发者的时间很宝贵;不要使琐碎的任务难以执行,既耗时又容易发生人为错误。源代码的简单性本身就是一个很大的功能。


1
Mahdi谢谢。我是JavaScript的长期用户,是的,这就是为什么我在引号中编写“类”的原因。虽然,术语是令人误解的,但许多专业组织都将JavaScript的构造函数称为类。developer.mozilla.org/en-US/docs/Web/JavaScript/...
TaylorMac

并感谢您对简单性的建议。我的问题更多是关于范围而不是可访问性。严格与宽松。
2014年

@TaylorMac非常欢迎您,希望对您有所帮助。
马赫迪(Mahdi)2014年

@Mahdi,当前Javscript有课程。
Menai Ala Eddine

1

静态属于函数IMO,在您的情况下,您有一个私有静态,因此...

Panes._createPane=function(pane){}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.