JavaScript はどの程度柔軟ですか?

伊谢尔伦
リリース: 2016-11-24 09:44:00
オリジナル
978 人が閲覧しました

JavaScript は柔軟な言語であり、非常に表現力が豊かなので、多くの人が驚くこと間違いなしの例をあげましょう。

この記事は、Kyle Simpson の記事「Iterating ES6 Numbers」からインスピレーションを受けています。

まず、Number.prototypeオブジェクトにaddメソッドをデプロイします。

Number.prototype.add = function (x) {
  return this + x;
};
ログイン後にコピー

上記のコードは、Number インスタンスの add メソッドを定義しています。 (この書き方に慣れていない方は、私の「JavaScript オブジェクト指向プログラミング」を先に読むことをお勧めします。)

Number のインスタンスは数値なので、その数値に対してメソッドが呼び出される場合、数値は自動的にインスタンスオブジェクトに変換されるので、以下のような結果が得られました。

8['add'](2)
// 10
ログイン後にコピー

上記のコードで、呼び出しメソッドが 8.add ではなく 8['add'] と書かれているのは、値の後のドットがドット演算子ではなく小数点として解釈されるためです。

値を括弧内に置くと、ドット演算子を使用してメソッドを呼び出すことができます。

(8).add(2)
// 10
ログイン後にコピー

実は、もう一つ書き方があります。

8..add(2)
// 10
ログイン後にコピー

上記コードの最初のドットは小数点として解釈され、2番目のドットはドット演算子として解釈されます。意味を明確にするために、以下では括弧を使用します。

addメソッドは数値を返すので連鎖させることができます。

Number.prototype.subtract = function (x) {
  return this - x;
};
(8).add(2).subtract(4)
// 6
ログイン後にコピー

上記のコードは、Number オブジェクトのインスタンスにsubtractメソッドをデプロイしており、addメソッドとチェーンで呼び出すことができます。

属性の呼び出しに角括弧を使用すると、非常に奇妙な書き方になります。

8["add"](2)["subtract"](4)
// 6
ログイン後にコピー

より複雑なメソッドをデプロイすることもできます。

Number.prototype.iterate = function () {
  var result = [];
  for (var i = 0; i <= this; i++) {
    result.push(i);
  }
  return result;
};
(8).iterate()
// [0, 1, 2, 3, 4, 5, 6, 7, 8]
ログイン後にコピー

上記のコードは Number オブジェクトのプロトタイプに iterate メソッドをデプロイしており、値を配列に自動的に展開できます。

つまり、値に対して直接メソッドを呼び出すことができるようになりましたが、後ろの括弧のペアが少し煩わしいように見えますが、括弧を削除することはできますか?つまり、次の式

(8).double().square()
ログイン後にコピー

を別の言い方で書けますか?

rreee

できるよ。

ES5では、各オブジェクトの属性には、属性の読み取り操作をカスタマイズするために使用される値メソッドgetがあることが規定されています。

(8).double.suqare
ログイン後にコピー

上記のコードは、Number.prototype の 2 つのプロパティ double と square と、その値のメソッド get を定義しています。

したがって、どの値でも、これら 2 つの属性を読み取ると、次のように書くことができます。

Number.prototype = Object.defineProperty(
  Number.prototype, "double", {
    get: function (){return (this + this)} 
  }
);
Number.prototype =  Object.defineProperty(
  Number.prototype, "square", {
    get: function (){return (this * this)} 
  }
);
ログイン後にコピー

代わりに角括弧演算子を使用することもできます。

りー


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!