Javascript OOP私有函数

时间:2016-04-23 15:18:56

标签: javascript function oop private

我想创建一个构造函数,可以使用json文件进行实例化,然后由一些私有函数使用,最终将它们的结果传递给原型的公共函数。这是正确的做法吗?

这里有更具体的代码:

//constructor
function queryArray(json){
    this.json = json;

    //init qry template with default values
    function qryInit() {
        var qryTemplate = {
            //some stuff
        }
        return qryTemplate;
    }

    //generate array of request templates
    function qryTempArray(json){
        var template = qryInit();
        var qryTempArray1 = [];
        for(var i = 0; i < json.length; i++){
            qryTempArray1.push({
                'SearchIndex': json[i].SearchIndex,
                'Title': json[i].Title,
                'Keywords': json[i].Keywords,
                'MinimumPrice': json[i].MinimumPrice,
                'MaximumPrice': json[i].MaximumPrice,
                'ResponseGroup': template.ResponseGroup,
                'sort': template.sort
            });
        }
        return qryTempArray1;
    }
}

//function for finally building all the queries
queryArray.prototype.qryBuilder = function(){
    var qryTempArray1 = [];
    qryTempArray1 = qryTempArray(this.json);
    //other stuff
}

如果我在Object上调用qryBuilder函数,则会出错 在函数qryTempArray中的for循环中的json.length(undefined)。 为什么?

1 个答案:

答案 0 :(得分:0)

正如上面的代码所示,我甚至对你的循环感到惊讶。当你调用qryBuilder()时,你似乎得到了未定义; 我希望以下内容能够发挥作用。

//constructor
function queryArray(json) {
    var self = this;
    self.json = json;

    //init qry template with default values
    self.qryInit = function() {
        var qryTemplate = {
            //some stuff
        }
        return qryTemplate;
    }

    //generate array of request templates
    self.qryTempArray = function(json) {
        var template = self.qryInit();
        var qryTempArray1 = [];
        for (var i = 0; i < json.length; i++) {
            qryTempArray1.push({
                'SearchIndex': json[i].SearchIndex,
                'Title': json[i].Title,
                'Keywords': json[i].Keywords,
                'MinimumPrice': json[i].MinimumPrice,
                'MaximumPrice': json[i].MaximumPrice,
                'ResponseGroup': template.ResponseGroup,
                'sort': template.sort
            });
        }
        return qryTempArray1;
    }
    return self;
}
queryArray.prototype.qryBuilder = function() {
    var qryTempArray1 = [];
    qryTempArray1 = this.qryTempArray(this.json);
    return qryTempArray1;
}
var q = new queryArray([{
    'SearchIndex': 0,
    'Title': 'foo',
    'Keywords': 'testing',
    'MinimumPrice': 20,
    'MaximumPrice': 40
}]);
console.log(q);
console.log(q.qryBuilder());