用方法创建javascript对象?

时间:2015-09-21 19:33:12

标签: javascript node.js

我需要创建一个"解析器"库只想传入源文档一次。如何提供源文档并将其存储在javascript对象中,以便我可以在文档上调用方法?

这就是我正在尝试的内容,但它感觉非常混乱...尤其是this关键字随处可见:

'use strict';

var reader = function (info) {

    this.doc = info;

    this.getNode = function (name) {
        var nodes = this.doc.items.filter(function (item) {
            return (item.name.toUpperCase() == name.toUpperCase());
        });
        return (nodes.length == 1)
            ? nodes[0]
            : null;
    };

    this.getItems = function (name) {
        var node = this.getNode(name);
        return (node ? node.items : []);
    };

    return this;
};

module.exports = reader;

我的目标是在我的应用的其他区域使用此阅读器对象,如下所示:

var infoDoc = loadFromFile();   // Loads the file from disk

var reader = require('./reader')(infoDoc);

var items = reader('widgets');

提前谢谢。

1 个答案:

答案 0 :(得分:0)

从您的使用情况来看,您正在使用工厂模式。对于这样的模式,使用this是不必要的(因为在javascript中基本工厂模式不是基于构造函数)。实现它的一种简单方法是:

'use strict';

var reader = function (info) {

    var getNode = function (name) {
        var nodes = info.items.filter(function (item) {
            return (item.name.toUpperCase() == name.toUpperCase());
        });
        return (nodes.length == 1)
            ? nodes[0]
            : null;
    };

    var getItems = function (name) {
        var node = getNode(name);
        return (node ? node.items : []);
    };

    // return a map of the functions you want to expose.
    return {
        getItems: getItems,
        getNode: getNode
    };
};

module.exports = reader;