拡張とフツーの関数
これまではフツーの関数でしか処理を宣言したことがありませんでしたが、Array.prototype.●● = 処理
という記述によって、Arrayオブジェクトに●●という処理を根本的に登録する、いわゆる拡張なる機能があるらしいと知りました。
でもそれじゃ一体、いつ拡張を登録すべきで、いつフツーの関数を宣言すべきなのでしょうか?
考えた例
例えば以下の例 (insertAndTrim
という拡張と insertAndTrimArray
というフツーの関数) を考えてみたのですが、どちらがいつ便利なのかよく分かりません。
拡張
登録
JavaScript
1/*---------------------------------------- 2 arrayExtensions.js 3----------------------------------------*/ 4 5(function () { 6 'use strict'; 7 8 Array.prototype.insertAndTrim = function(value, { index = 0, maxCount = null } = {}) { 9 this.splice(index, 0, value); 10 if (maxCount) { 11 return this.slice(0, maxCount); 12 } 13 return this; 14 }; 15 16})();
利用
JavaScript
1/*---------------------------------------- 2 test.js 3----------------------------------------*/ 4 5let arr = [1, 2, 3]; 6arr.insertAndTrim(4, { index: 1, maxCount: 4 }); 7console.log(arr); // [1, 4, 2, 3]
フツーの関数
宣言
JavaScript
1/*---------------------------------------- 2 arrayUtils.js 3----------------------------------------*/ 4export function insertAndTrimArray(arr, value, { index = 0, maxCount = null } = {}) { 5 arr.splice(index, 0, value); 6 if (maxCount) { 7 arr = arr.slice(0, maxCount); 8 } 9 return arr; 10}
利用
JavaScript
1/*---------------------------------------- 2 test.js 3----------------------------------------*/ 4 5import { insertAndTrimArray } from './arrayUtils.js'; 6 7let arr = [1, 2, 3]; 8arr = insertAndTrimArray(arr, 4, { index: 1, maxCount: 4 }); 9console.log(arr); // [1, 4, 2, 3]
補足
・ES2015(ES6) の利用です。
・拡張も関数の一種なのかもしれませんが区別する正しい呼称を知らないので、当質問では「フツーの関数を宣言する」と「拡張を登録する」とさせて頂きました。
・どうやら Object は拡張すべきでないらしい のですが、それ以外 (上記のような Array や Storage や String などなど) についてはいつ拡張での登録を利用すべきなのか知りたいです。
よろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/07/25 04:17
2024/07/25 08:08