我的代码出现以下问题。我有一个功能,将获取产品数据,然后返回它。我们可以对数据进行排序(例如价格,名称,数据,库存水平等)有很多选择。现在我传递我的数据(采用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(){}
任何帮助都将受到赞赏。
答案 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
就是这种情况})。