2017-04-13 14 views
0

'this'キーワードを使用せずにJavaScriptクラスを作成することはできますか?式はJavaScriptクラス、this、that、self、など

var self = this; 
... 
self.property = value; 

などの表現も禁止されています。私は文脈を考えてヴァルスだけを使いたいとは思っていません。

は、この単純なクラスを見てみましょう:

function Timer() { 
 
    var interval = 0; 
 
    var count = ++Timer.totalCount; 
 

 
    function setInterval(val) { 
 
    interval = val; 
 
    } 
 
    function run() { 
 
    setTimeout(done, interval); 
 
    } 
 
    function done() { 
 
    var div = document.createElement('div'); 
 
    div.innerHTML = 'Timer #' + count + ' finished in ' + interval + ' ms'; 
 
    document.body.appendChild(div); 
 
    } 
 

 
    return { 
 
    setInterval: setInterval, 
 
    run: run 
 
    } 
 
} 
 
Timer.totalCount = 0; 
 

 
var t1 = new Timer(); 
 
var t2 = new Timer(); 
 
var t3 = new Timer(); 
 

 
//how to directly set interval value without set function? 
 
t1.setInterval(3000); 
 
t2.setInterval(2000); 
 
t3.setInterval(1000); 
 

 
t1.run(); 
 
t2.run(); 
 
t3.run();

このクラスは、 'この' まったく使用しません。

正しいですか?

本当のクラスを作成できますか?潜在的な問題はありますか?

get/set関数なしでこのクラスのプロパティを作成するにはどうすればよいですか?

継承を使用してそのクラスを拡張することはできますか?

+2

私が持っている大きな問題がある...なぜ:ここではあなたのサンプルは、継承部を含む、ES2015に書き換えていますか? –

+0

あなたのコードには何が間違っていますか? – ands

答えて

1

まずはthisがJavaScriptの基本です。あなたがそれを理解し、その文脈についての理由を理解することが非常に推奨されます。

さらに伝統的なOOPコードを使い、ES6/ES2015(またはBabelで蒸解)を使用できる場合は、thisについてのすべての推論も簡単になり、すべてのコードがよりクリーンになります。

class Timer { 
 
    constructor(count, interval) { 
 
    this.interval = interval 
 
    this.count = count 
 
    } 
 

 
    run() { 
 
    setTimeout(() => { 
 
     const div = document.createElement('div') 
 
     div.innerHTML = `Timer #${this.count} 
 
     finished in ${this.interval} ms` 
 
     document.body.appendChild(div) 
 
    }, this.interval) 
 
    } 
 
} 
 

 
class OneSecondTimer extends Timer { 
 
    constructor(count) { 
 
    super(count, 1000) 
 
    } 
 
} 
 

 
const t1 = new Timer(1, 3000) 
 
const t2 = new Timer(2, 2000) 
 
const t3 = new OneSecondTimer(3) 
 

 
t1.run() 
 
t2.run() 
 
t3.run()

関連する問題