可能的严格违规 - 使用JavaScript函数的原型方法

时间:2014-06-15 14:21:18

标签: javascript jshint

我的代码出现以下问题。我有一个功能,将获取产品数据,然后返回它。我们可以对数据进行排序(例如价格,名称,数据,库存水平等)有很多选择。现在我传递我的数据(采用JSON格式)并根据设置为参数的选项执行数据转换,但是当我运行代码时出现以下错误:Possible strict violation.

这是我对数据进行排序的功能:

// this is how i call the function, the data argument is the JSON data and formatting options are set in an object literal - this determines the data by name

dataSort(data, {'name':'product name'});

function dataSort(d, obj) {
// we do lots of stuff then later in the function   
for (var key in obj) {
        if(obj.hasOwnProperty(key)){
            if(key === 'name'){
                d = this.getProductByName(d, obj[key]); // This line produces the error
            }
        }
    }
    return d;
}

dataSort.prototype.getProductByName = function(data, val){
    // do stuff the return data
    return data;
};

现在我总是被教导在创建函数的内部方法时使用原型,为什么我会收到错误?我究竟做错了什么?我应该使用私人方法还是使用内部方法this.getProductByName = function(){}任何帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

定义私有帮助函数的正确方法是使用闭包。

var datasort = (function () {
    var getProductByName = function (data, val){
        // do stuff
        return data;
    };

    return function datasort(d, obj) {
        var key;

        // do lots of stuff ...
        return getProductByName(d, obj.name);
    };
}());

getProductByName现在只对内部datasort函数可见(它被赋值给同名的变量)。

关闭的效果是getProductByName只创建一次,而不是每次调用datasort(如果您将var getProductByName ...移动到function datasort就是这种情况})。