События ООП Javascript - PullRequest
1 голос
/ 27 июля 2011

Я хочу создать объект, который может анализировать определенный тип файла. Я просмотрел некоторые файлы в File API и хочу, чтобы мой объект работал примерно так же. В общем, я хочу вот что:

Функция, называемая CustomFileParser. Я хочу использовать его следующим образом:

var customFileParser = new CustomFileParser();
customFileParser.parsed = paresed;
customFileParser.progress = progress;

customFileParser.parse(file);

function parsed(event){
 //The file is loaded, you can do stuff with it here.
}

function progess(event){
 //The file load has progressed, you can do stuff with it here.
}

Так что я думал о том, как определить этот объект, но я не уверен, как определить эти события и как я должен это сделать.

function customFileParser(){
 this.parse = function(){
  //Do stuff here and trigger event when it's done... 
 }
}

Однако я не уверен, как определить эти события и как я могу это сделать. Кто-нибудь может мне помочь?

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Javscript - это язык ООП, основанный на прототипах, а не класс, как большинство других популярных языковПоэтому конструкции ООП немного отличаются от того, к чему вы могли бы привыкнуть.Вы должны игнорировать большинство веб-сайтов, которые пытаются реализовать наследование на основе классов в JS, так как этот язык не предназначен для использования.

Причина, по которой люди делают это, потому что они привыкли к системе, основанной на классах, и обычно даже не подозревают, что являются альтернативой этому, поэтому вместо того, чтобы пытаться научиться правильному пути, они пытаются реализовать способчто они более знакомы, что обычно приводит к загрузкам и нагрузкам хаков или внешних библиотек, которые по существу не нужны.

Просто используйте прототип.

function CustomFileParser(onParsed, onProgress) {
    // constructor
    this.onParsed = onParsed;
    this.onProgress = onProgress;
};

CustomFileParser.prototype.parse = function(file) {
    // parse the file here
    var event = { foo: 'bar' };
    this.onProgress(event);
    // finish parsing
    this.onParsed(event);
};

И вы можете использовать его кактак что

function parsed(event) {
    alert(event);
}

function progress(event) {
    alert(event);
}

var customFileParser = new CustomFileParser(parsed, progress);

var file = ''; // pseudo-file
customFileParser.parse(file);
0 голосов
/ 27 июля 2011

Мне кажется, что ваша программа должна выглядеть так:

function customFileParser( onparse , progress){
this.onparse = onparse;
this.progressStatus = 0;
this.progress = progress;
this.parser = function (chunk) 

}
this.parse = function(){
// Do stuff of parsing


// Determine how much data is it
// Now make a function that parses a bit of data in every run
// Keep on calling the function till the data is getting parsed
// THat function should also increase the percentage it think this can be done via setTimeout.
// After every run of the semi parser function call the progress via something like
this.parser();
if(progressStatus <100){
this.progress(this.progressStatus);
}else{
 this.parsed();
 }
}
}

, и вы можете создать экземпляр этого объекта, например

 var dark = new customFileParser( function () { // this tells what to
    do what parsed is complete  } , function (status) { // this tells what
    to do with the progress status } ) ;

, используя метод iпредложил.вы можете определить разные методы для всех экземпляров объекта, который у вас есть!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...