是否有更清晰的方法来写出作为对象一部分的多个函数?

时间:2013-06-30 09:24:31

标签: javascript

我有以下内容:

   $scope.modalReset = function () {
        gridService.modalReset($scope);
    }

    $scope.rowAction = function (action, row) {
        gridService.rowAction(action, $scope, row, 'Question');
    }

    $scope.submitItem = function (formData) {
        gridService.submitItem($scope, 'Question', formData);
    }

有没有办法可以更简单地编写这些函数调用。我不打算将它们结合起来。所有函数都是作用域对象的一部分。

4 个答案:

答案 0 :(得分:0)

如果您正在寻找封装这些树函数的方法,那么可以想到两种方法。

方法1:with声明(请不要使用此方法。它有lots problems。)

with ($scope) {
    modalReset = function () {
        gridService.modalReset($scope);
    };

    rowAction = function (action, row) {
        gridService.rowAction(action, $scope, row, "Question");
    };

    submitItem = function (formData) {
        gridService.submitItem($scope, "Question", formData);
    };
}

方法2:对象文字(这是推荐的方法。)

define($scope, {
    modalReset: function () {
        gridService.modalReset($scope);
    },
    rowAction: function (action, row) {
        gridService.rowAction(action, $scope, row, "Question");
    },
    submitItem = function (formData) {
        gridService.submitItem($scope, "Question", formData);
    }
});

此方法需要一个名为define的函数:

function define(obj, props) {
    for (var key in props)
        if (props.hasOwnProperty(key))
            obj[key] = props[key];
}

我希望这会有所帮助。

答案 1 :(得分:0)

如果您使用jQuery,则可以使用$.extend

$.extend($scope, {
    modalReset: function () {
        gridService.modalReset($scope);
    },
    rowAction: function (action, row) {
        gridService.rowAction(action, $scope, row, "Question");
    },
    submitItem = function (formData) {
        gridService.submitItem($scope, "Question", formData);
    }
});

答案 2 :(得分:0)

这看起来像你正在使用AngularJS($scope等)。在这种情况下,请使用angular.extend(),如下所示:

angular.extend($scope, {
  modalReset: function () {
    ...
  },

  ...
});

答案 3 :(得分:0)

  

有没有办法可以更简单地编写这些函数调用

它们是函数定义,而不是调用:-)它们的内容之间没有太大的相似性,所以你当前的方式很好 - 如果你不喜欢三重赋值,你可以使用提出的extend功能在其他答案中。

但是如果gridService方法具有更统一的签名,例如

$scope.modalReset = function () {
    gridService.modalReset($scope);
};
$scope.rowAction = function (action, row) {
    gridService.rowAction($scope, 'Question', action, row);
};
$scope.submitItem = function (formData) {
    gridService.submitItem($scope, 'Question', formData);
};

然后你可以将它缩短为

["modalReset", "rowAction", "submitItem"].forEach(function(methodName) {
     $scope[methodName] = gridService[methodName].bind(gridService, $scope, "Question");
});