オブジェクト内で定義したコールバック関数でオブジェクトのプロパティを変更する方法
MonacaクラウドでOnsenUI/AngularJSを使いアプリ制作の勉強中です。
ファイルを扱うAngularJSサービスオブジェクトを作っています。
フォルダのファイル一覧を取得するメソッドの中でFileSystemAPIを使うため
コールバック関数を使わなくてはならないのですが、その中でファイル一覧を格納するプロパティ(this.x)を書き換えようとすると以下のようなエラーが出ます(use strict)。
Error in Success callbackId: FileXXXXXXXXXX : TypeError: Attempted to assign to readonly property.
JavaScriptの仕様のようですが、コールバック関数内でプロパティを変更する
スマートな回避方法があればお教え頂けると幸いです。
再現する簡略化したコードを追記いたします。
実際にはエラー発生箇所でディレクトリの中身をプロパティに設定したいと考えております。
var obj = function() {
'use strict';
this.directory = '';
this.changeDirectory = function(directory, returnFunction){
this.directory = directory; //問題なし
pstFileSystem.root.getDirectory(directory, {create: true, exclusive: false},
function(dirEntry){
this.directory = directory; //エラー
returnFunction(dirEntry);
}
);
};
};
window.onload = function() {
'use strict';
console.log('pageinit start!');
var o = new obj;
o.changeDirectory("/", function(dirEntry){console.log('directory is "' + o.directory + '"');});
};