2017-01-12 7 views
1

getterメソッドとsetterメソッドを持つ単純なjavascriptオブジェクトを作成しています。私はsetterメソッドにいくつかの追加コードを入れていますので、プロパティ値を変更するたびに実行されます。だから私の考えはここにありますgetterとsetterといくつかのコールバック関数を使用したjavascriptオブジェクト

listOfFileToLoad[name] = { 
    _loaded : xhr.loaded, 
    get loaded(){ return this._loaded; }, 
    set loaded(value) { 
     this._loaded = value; 
     //on update 
     updateLoadingList(); 
    }, 
    _total : xhr.total, 
    get total(){ 
     return this._total; 
    }, 
    set total(value){ 
     updateLoadingList(); 
     this._total = value ; 
    } 
}; 

私はこのコードを1つのスレッドで見つけました。私はそれを使用して、私はJavaスクリプトがまだ関数の言語であることを意味し、これを使用して正しいのだろうかと思っています。

私は

listOfFileToLoad[name].loaded(0) 

または

listOfFileToLoad[name].loaded() 

おかげさま次やろう問題arrise。

+1

全体のポイントであります関数呼び出しではなく、プロパティとして使用します。 'listOfFileToLoad [name] .loaded'を角括弧なしで使用してください – edc65

答えて

3

が、アクセスのあなたの方法:

あなたのコードが失敗しているのはなぜされ、原因の取得と設定は、あなたが彼らにこの方法を使用する必要があるので、プロパティではなく、機能に設定されていますデータはありません。

JavaScriptでgetsetというキーワードを使用してgetterssettersを作成すると、機能よりも属性のように機能します。構造、次の2つの文がエラーをもたらすことを考慮

var obj = { 
    _subject: 'world', 

    sayHello: function() { 
     console.log('Hello ' + this._subject); 
    }, 

    get subject() { 
     return this._subject; 
    }, 

    set subject(newSubject) { 
     this._hello = newSubject; 
     this.sayHello(); 
    } 
} 

// incorrect usage 
obj.subject();   // TypeError: obj.subject is not a function 
obj.subject('Internet'); // TypeError: obj.subject is not a function 

は、以下が正しい使い方である:ゲッターとセッターを使用

// correct usage 
obj.subject;    // returns 'world' 
obj.subject = 'Internet'; // prints 'Hello Internet' 
4

あなたはそれを参照し、値を取得するには

listOfFileToLoad[name].loaded = 0; 

を使用したいので、それを設定するには、gettable /設定可能なプロパティとしてloadedでオブジェクトを作成しました:

console.log("Loaded value:" + listOfFileToLoad[name].loaded); 
2

ゲッターとセッターは、値が読み取られるか割り当てられるときに関数を実行させるプロパティーを定義します。

関数として直接呼び出すことはできません。

構文listOfFileToLoad[name].loaded(0)は意味:loaded getter関数を呼び出しの戻り値であるloadedプロパティの値を取得し、機能としてその値を呼び出します。

この値は、this._loadedで、最初はxhr.loadedです。

this._loadedが関数の場合は、使用している構文で呼び出すことができます。それが他のものなら、あなたはできません。

セッター関数を呼び出す場合は、通常の割り当て:listOfFileToLoad[name].loaded = "some value"を使用します。

0

コードは大丈夫ですが、このアプローチは適切です。コードスニペットは罰金であることを

listOfFileToLoad['name'].loaded; 
listOfFileToLoad['name'].loaded = 2; 
関連する問題