用方法创建javascript对象

Create javascript object with methods?

本文关键字:对象 javascript 创建 方法      更新时间:2023-09-26

我需要创建一个"解析器"库,并且只希望传入源文档一次。我如何提供源文档并将其存储在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');

从您的使用情况来看,您正在使用工厂模式。对于这样的模式,使用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;