Ich habe eine Klasse namens TileStreamer
, die ich zur Zeit als ich die Definition folgt:Wie richtig in Node.js Klasse strukturieren
function TileStreamer {
};
Diese Klasse hat Konstanten, die ich wie folgt definieren:
// Tiles are 256 x 256 pixels
TileStreamer.prototype.TILE_SIZE = 256;
// Header size in bytes
TileStreamer.prototype.HEADER_SIZE = 28;
// Various table entry sizes in bytes
TileStreamer.prototype.RESOLUTION_ENTRY_SIZE = 12;
TileStreamer.prototype.TILE_COUNT_SIZE = 4;
TileStreamer.prototype.TILE_ENTRY_SIZE = 12;
// Offsets within header
TileStreamer.prototype.WIDTH_OFFSET = 3;
TileStreamer.prototype.HEIGHT_OFFSET = 4;
TileStreamer.prototype.NUM_TABLES_OFFSET = 7;
TileStreamer.prototype.UNPOPULATED_OFFSET = 12092;
Dort auch andere Variablen. Diese Variablen sind wichtig, da von anderen Klassen aus zugänglich sein müssen. Sie erhalten ihre Werte innerhalb der Methoden dieser Klasse. Dies ist, was ich hinsichtlich der Struktur unsicher bin. Was ich zur Zeit bin versucht:
TileStreamer.prototype.header;
TileStreamer.prototype.resolutionEntry;
TileStreamer.prototype.resolutionTable;
TileStreamer.prototype.filepath;
TileStreamer.prototype.s3;
TileStreamer.prototype.level;
TileStreamer.prototype.ncols;
TileStreamer.prototype.nrows;
TileStreamer.prototype.nlevels;
TileStreamer.prototype.toffset;
TileStreamer.prototype.tsize;
TileStreamer.prototype.modifiedTime;
TileStreamer.prototype.tile;
TileStreamer.prototype.host;
TileStreamer.prototype.bucket;
Diese Klasse hat auch Methoden wie:
TileStreamer.prototype.Init = function(filepath, index, s3config){
var retval = false;
AWS.config.update({accessKeyId: s3config.access_key, secretAccessKey: s3config.secret_key});
var blc = new BlockLibraryConfigs();
var awsConfig = blc.awsConfig;
AWS.config.update({region: awsConfig.region});
var aws = new AWS.S3();
var params = {
Bucket: s3config.bucket,
Key: s3config.tile_directory + filepath,
Range: 'bytes=0-' + (this.HEADER_SIZE - 1)
};
aws.getObject(params, function(err, data){
if(err == null){
TileStreamer.modifiedTime = data.LastModified;
var header = bufferpack.unpack('<7I', data.Body);
TileStreamer.header = header;
TileStreamer.nlevels = header[TileStreamer.NUM_TABLES_OFFSET];
if(TileStreamer.nlevels == 5){
TileStreamer.level = 0;
TileStreamer.ncols = Math.ceil((header[TileStreamer.WIDTH_OFFSET] * 1.0)/TileStreamer.TILE_SIZE);
TileStreamer.nrows = Math.ceil((header[TileStreamer.HEIGHT_OFFSET] * 1.0)/TileStreamer.TILE_SIZE);
}
}
});
};
Die oben beschriebene Methode sollte einige der Werte der Variablen, wie modifiedTime
so eingestellt, dass ich kann, Zugriff auf sie in einer anderen Klasse wie:
TileStreamer = require('tilestreamer.js');
var ts = new TileStreamer();
ts.Init(parPath, index, config);
var last_modified = ts.modifiedTime;
Der einfachste Weg ist Eigenschaften in der init-Funktion mit dem 'this' Präfix zu erklären. .. https://jsfiddle.net/v6muhoyk/ – Archer
Ich wollte nur das gleiche sagen. Verwende 'this' oder TileStreamer.prototype.modifiedTime = ...; – jjhavokk
@jjhavokk Also, wenn ich Variablen in einer asynchronen Funktion, wie ich in meinem Code, setzen würde, würde mit 'TileStreamer.prototype.modifiedTime = data.LastModified' gesetzt' modifiedTime' für die gleiche Instanz? –