2016-05-31 1 views
0

ES6では、カスタムクラスでjavascriptの組み込みオブジェクトを拡張できます。このように、カスタムメソッドを持つ、NumberStringDateのオブジェクトを作成できます。javascriptクラスを拡張してコンテナオブジェクトにラップします

私はこれを実験していましたが、here from MDN (Mozilla Developer Network)の例のように、Myというコンテナオブジェクト内にオブジェクトをラップしようとしました。私はこのようなオブジェクトの内側に私のカスタムDateクラスを定義するときしかし:

Uncaught SyntaxError: Unexpected token .

Here is a fiddleこれを示しています。

var My = {}; 

class My.Date extends Date { 
    constructor() { 
    super(); 
    } 

    getFormattedDate() { 
    var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; 
    return this.getDate() + "-" + months[this.getMonth()] + "-" + this.getFullYear(); 
    } 
} 

を私は次のにSyntaxErrorを取得します。私は賭け

はこれを回避するためにいくつかの方法があるが、私はそれを行う方法がわからないです...

+1

。 – Dieterg

+1

識別子名の公式情報については、[link](http://www.ecma-international.org/ecma-262/5.1/#sec-7.6)をチェックしてください – jano

答えて

0

問題を回避するには、新しいクラスは関数ローカルスコープ内で宣言されるように、関数のロジックをラッピングした後、関数内のグローバルMyコンテナに追加されます。
グローバルオブジェクトを混乱させることなく、カスタマイズされたオブジェクト(拡張プリミティブ)を使用することができ、同様に見えます(例えば、クラス名はDateです)。

var My = {}; 

function init(){ 

    class Date extends window.Date { 
     constructor() { 
      super(); 
     } 

     getFormattedDate() { 
      var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; 
      return this.getDate() + "-" + months[this.getMonth()] + "-" + this.getFullYear(); 
     } 
    } 

    My.Date = Date; 

} 

init(); 

Date === window.Date; // true 
My.Date === window.Date; // false 
My.Date.name // Date -> class name 
new My.Date().getFormattedDate(); // 2-Jun-2016 

this answer hereから別の解決策:あなたが `あなたのクラス名に.`使用することはできません

var My = {}; 

My.Date = class extends Date { 
    constructor() { 
     super(); 
    } 

    getFormattedDate() { 
     var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; 
     return this.getDate() + "-" + months[this.getMonth()] + "-" + this.getFullYear(); 
    } 
} 
2

は、あなたのクラス名に.年代を使用することを許可されていません。しかし、ネームスペースにクラスインスタンスを追加することは可能です。

var My = {}; 

class MyDate extends Date { 
    constructor() { 
    super(); 
    } 

    getFormattedDate() { 
    var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; 
    return this.getDate() + "-" + months[this.getMonth()] + "-" + this.getFullYear(); 
    } 
} 

My.Date = MyDate; 

直接

var My = {}; 

My.Date = class MyDate extends Date { 
    constructor() { 
    super(); 
    } 

    getFormattedDate() { 
    var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; 
    return this.getDate() + "-" + months[this.getMonth()] + "-" + this.getFullYear(); 
    } 
} 
関連する問題