我正在努力理解为什么这个脚本在浏览器中完美运行,但在服务器中没有运行Node.js。
data = [{"stars": 3}, {"stars": 2}]
var ParseParameter = function(){
this.parser = "";
}
ParseParameter.prototype = {
setStrategy: function(parser) {
this.parser = parser;
},
parse: function(parameter) {
return this.parser.parse(parameter);
}
};
var IntegerParser = function(filter){
this.parameter = '';
this.filter = filter;
this.parse = function(parameter){
this.parameter = parseInt(parameter);
}
this.filterBy = function(item){
return item[this.filter] == this.parameter;
}
}
var filter = 'stars',
parameter = '2',
parseParameter = new ParseParameter();
var integerParser = new IntegerParser(filter);
parseParameter.setStrategy(integerParser);
parseParameter.parse(parameter);
var dataFiltered = data.filter(parseParameter.parser.filterBy);
console.log(dataFiltered);

在服务器上,我在控制台中打印this.parameter
和this.filter
的值filterBy
,undefined
我在Node.js版本8.11.2上运行
任何建议将不胜感激。
答案 0 :(得分:3)
可能是由于脚本中this
关键字问题所致。内部函数this
内部引用window
或global
对象。例如,
在以下代码中,this.filter
的{{1}}不是指this.filterBy
函数范围内存在的filter属性,而是指定义为{{1}的变量}}。将此名称更改为其他名称,您将看到IntegerParser
,它也不会在浏览器上运行。这可能是你的问题。
var filter = 'stars'
通过将undefined
存储到变量中供以后使用,您可以使用已知的解决方案来解决此问题,而不是使用var IntegerParser = function(filter){
this.parameter = '';
this.filter = filter;
this.parse = function(parameter){
this.parameter = parseInt(parameter);
}
this.filterBy = function(item){
return item[this.filter] == this.parameter;
}
}
。如下例所示:
this
您的整个代码包括我的解决方案如下:
this
应该没有任何问题。请试着看看它是否适合你。