2016-04-15 21 views
0

こんにちは、私はjavascriptを初めて使っています。 1つのオブジェクトListModelがあり、2番目のオブジェクトからaddToModelメソッドにアクセスしようとしています。2つ目のオブジェクトから1つのオブジェクトのメソッドにアクセスする方法

function ListModel(){ 
    this.list = {}; 
} 

ListModel.prototype.addToModel = function(s){ 
    var items = s.split("\n"); 
    for(var i =0; i<items.length-1; i++){ 
     console.log(items[i] + "\n"); 
    } 

}

広範な検索後、私はこの問題の解決策を見つけることができませんでした。

第二の目的である:

function ListMaker(){ 
    this.model = new ListModel(); 
} 

ListMaker.prototype.read = function(e){ 
    var f = e.target.files[0]; 

    if (f) { 
     var r = new FileReader(); 
     r.onload = function(e) { 
     var contents = e.target.result; 
     this.model.addToModel(contents); 
     document.getElementById("ta").innerHTML = contents; 
    } 
     r.readAsText(f); 
    } else { 
     alert("Failed to load file"); 
    } 
} 

Iが呼び出す読み出し方法において: this.model.addToModel(コンテンツ)。 コンソールが返されます 未定義のプロパティ 'addToModel'を読み取ることができません 私は行を次のように変更します: this.model = new ListModel()。addToModel(contents); この方法は、期待通りに機能する。

多分私はこれについて間違った方法をとっています。 ご協力いただければ幸いです。あなたはこのはもはやあなたがそれだと思う何を指している機能を呼び出したら

答えて

0

問題がこの

http://javascriptplayground.com/blog/2012/04/javascript-variable-scope-this/

です。

このをローカルで保持してから、コールバックでローカルを参照する必要があります。

ListMaker.prototype.read = function(e){ 
    var f = e.target.files[0]; 
    var _this = this; 
    if (f) { 
     var r = new FileReader(); 
     r.onload = function(e) { 
     var contents = e.target.result; 
     _this.model.addToModel(contents); 
     document.getElementById("ta").innerHTML = contents; 
    } 
     r.readAsText(f); 
    } else { 
     alert("Failed to load file"); 
    } 
} 

は、アクションでそれを参照してください。助けを​​

+0

感謝を。期待どおりにコードが実行されます。しかし、私のコードに変更を適用すると、同じエラーが発生します。私はもう少しコードを見て、あなたが私に与えたリンクをチェックして、まだ問題が残っていればおそらく私は完全なコードを電子メールで送ることができます。 –

関連する問題