2016-12-08 5 views
3

私はJavascriptでカスタムプロトタイプを開発しようとしています(下記のコードを参照してください)。Javascript - カスタムプロトタイプ - 構文エラー

文字を$文字に置き換えると、このコードは正常に機能します。しかし、文字より$文字を使用することをお勧めします。私は文字を使用している場合、私は以下のエラーメッセージが表示されます:

Uncaught SyntaxError: Invalid or unexpected token

文字で以下のコードを動作させるためにどのような方法や回避策はありますか?

<!DOCTYPE html> 
<html lang="en-IN"> 
<head> 
    <meta charset="UTF-8" /> 
<script> 
    function ₹(input){ 
     this.input=input; 
     var customPrototype={}; 
     customPrototype.upper=function(){ 
      return input.toUpperCase(); 
     } 
     customPrototype.count=function(){ 
      return input.length; 
     }; 
     customPrototype.lower=function(){ 
      return input.toLowerCase(); 
     } 
     customPrototype.__proto__ = ₹.prototype; 
     customPrototype.constructor = ₹; 
     return customPrototype; 
    } 
    ₹.prototype = { 
     top: function() { 
      return this.upper(); 
     }, 
     size: function() { 
      return this.count(); 
     }, 
     bottom: function() { 
      return this.lower(); 
     } 
    }; 
</script> 
</head> 
<body> 
    <script> 
     console.log(₹("ProgrAmmeR").top()); 
     console.log(₹("ProgrAmmeR").bottom()); 
     console.log(₹("ProgrAmmeR").size()); 
    </script> 
</body> 
</html> 
+0

実際のファイルが広告UTF-8に保存されているかどうかは二重に確認していますか? – JoschuaSchneider

+0

明らかに、₹は$:p –

答えて

5

JavaScriptは、識別子(details in the spec here)の広範囲の文字を許可します。識別子の最初のの文字は、後続の文字よりも少し制限されていますが、依然として多くの自由が許されます。

最初の文字は、$,_、またはUnicode標準(spec link)に従った "ID_Start"プロパティを持つUnicode文字である必要があります。 The character ₹にはID_Startがないため、JavaScript識別子の最初の文字として使用することはできません。

以降の文字は、$,_、または "ID_Continue"プロパティを持つUnicode文字である必要があります。 FWIWでは、ID_Continueを持たないため、その文字を識別子に使用することはできません。

はなぜ$ある(ルピー記号)と他の通貨記号£のような、¥、及びそのようなものがない場合に許可される(ドル記号)?確かにBrendan Eichは識別子に$を許可して例外を作成すると便利だと考えていたからです。

好きな場合はRsを使用できます。良くはありませんが... ...

function Rs() { } 
Rs.prototype = ...; 
+2

ほど強力ではありません。この便利なツール(https://mothereff.in/js-variables)は、Unicode変数名を検証します。 (実際に['₹'](https://mothereff.in/js-variables#%E2%82%B9)は有効な変数名ではないことを確認しています) – Frxstrem

+0

@Frxstrem - コードをデフォルトそのURLに表示されている名前 'ಠ_ಠ'とうまく動作します。残念ながら、私が好むキャラクターは有効ではありません:( –

+0

TJ Crowder - あなたの投稿で言及したリンクは現時点では利用できないようです。 –