脚本在浏览器中工作,但在NodeJS中不工作

时间:2018-05-28 06:49:09

标签: javascript node.js

我正在努力理解为什么这个脚本在浏览器中完美运行,但在服务器中没有运行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.parameterthis.filter的值filterByundefined

我在Node.js版本8.11.2上运行

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:3)

可能是由于脚本中this关键字问题所致。内部函数this内部引用windowglobal对象。例如,

在以下代码中,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

应该没有任何问题。请试着看看它是否适合你。