質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Highcharts

HighchartはHTML、SVG、VMLを使ったJavascriptの描写用ライブラリです。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

4回答

2494閲覧

javascript関数記載の使い分け

退会済みユーザー

退会済みユーザー

総合スコア0

Highcharts

HighchartはHTML、SVG、VMLを使ったJavascriptの描写用ライブラリです。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

8グッド

5クリップ

投稿2016/02/09 15:46

javascriptの関数の記載方法について、
プログラムの正しさ、管理のしやすさ、メモリ等のクライアント負荷等の観点で
どれが適切か教えてください。

現在の記載、悩みは以下です。
<インスタンス変数が不要な場合> 現在:グローバル関数として記載
インスタンス化によるメモリ浪費を防ぐため、不要なものはグローバル関数にしています。
管理上は関数の種類によって分けたいが、関数名等の工夫くらいしかわかりません。
(utli.calcA();としたいがutil_calcA();での区別)

javascript

1//インスタンス変数が不要な場合 2function a(){ 3 処理; 4} 5

<インスタンス変数が必要な場合> 現在:new演算を使ってインスタンス化(形式1)
インスタンス変数が必要な場合はnew演算を使っている。
形式2とどちらが良いか、他の記載が良いか

javascript

1//インスタンス変数保持が必要な場合 2//形式1 3function class1(){ 4 this.amount; 5} 6class1.prototype={ 7 funcA: function(){処理} 8} 9var instance1=new class1(); 10 11//形式2 12var instance2=function class2(){ 13 this.amount; 14} 15class2.prototype={ 16 funcB: function(){処理} 17}
ao_love, miyabi-sun, mhashi, KiKiKi_KiKi, yng13, Snsk, 5o5o_wagon, afroscript👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

think49

2016/02/10 02:23

「インスタンス化によるメモリ浪費を防ぐため、不要なものはグローバル関数にしています」が理解できなかったので補足をお願いします。
guest

回答4

0

ガベージコレクション

メモリに関してはガベージコレクション(どこからも参照されなくなったら開放される)の仕組みを理解して上手く管理する必要があります。
グローバル変数を使用するとページを閉じるまでメモリが開放されず、他の変数との衝突が起きるリスクがある為、出来る限りグローバル名前空間を使用しないことを推奨します。
また、クロージャの扱いには気をつけてください。

JavaScript

1'use strict'; 2(function () { 3 function sum (a, b) { 4 return Number(a) + Number(b); 5 // a, b はガベージコレクションによって回収される 6 } 7 function multi (a, b) { 8 return a * b; 9 // a, b はガベージコレクションによって回収される 10 } 11 function sub (a, b) { 12 return Number(a) - b; 13 // a, b はガベージコレクションによって回収される 14 } 15 16 function main () { 17 console.log(sum(1, 2)); // 3 18 console.log(sub(1, 2)); // -1 19 console.log(multi(1, 2)); // 2 20 } 21 22 main(); 23 // sum, multi, sub, main はクロージャで参照を保持するのでガベージコレクションでは回収されない(ページが閉じられるまでメモリを消費し続ける) 24}());

prototype パターン

メモリ消費の観点では「prototype パターン」と「this パターン」で比較される事が多いようです。

JavaScript

1'use strict'; 2function Hoge1 () {} // prototype パターン 3Object.defineProperty(Hoge1.prototype, 'foo', { // prototype 拡張なので new Hoge1 する度にメモリを消費せず、メモリ消費が this パターンよりも少ない 4 writable: true, 5 enumerable: false, 6 configurable: true, 7 value: function foo () { console.log('Hoge1'); } 8}); 9 10function Hoge2 () { // this パターン 11 Object.defineProperty(this, 'foo', { // this 値に定義するので new Hoge2 する度に foo を生成してメモリを消費する 12 writable: true, 13 enumerable: false, 14 configurable: true, 15 value: function foo () { console.log('Hoge2'); } 16 }); 17} 18 19new Hoge1().foo(); // Hoge1 20new Hoge2().foo(); // Hoge2

Re: ゲストユーザー さん

投稿2016/02/09 17:15

think49

総合スコア18164

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

正しさについて

CoffeeScriptは本当に駄目なのか?
http://qiita.com/raccy/items/fae9fc5923d78112d935

CoffeeScript は JavaScript の危険な部分を無くそうと、下記のような工夫をしている。

プログラムの正しさという観点では上記の記事が参考になるかと思います。
という訳で早速CoffeeScriptの公式サイトで確認
Try CoffeeScriptのタブをクリックすれば対話シェルっぽい奴が出てきて動的にコンパイル結果を表示してくれます。

JavaScriptはAjaxの登場辺りで爆発的に人気が出てから、
最速のスクリプト言語に上り詰める程最適化の進んだ言語ですので、
明らかな浪費や無駄なループを回さない限りメモリや処理速度で困る事はないかと思います。

追記

関数定義は同一スコープ内では下で宣言して上で読み込める等の仕様で、
Badパーツにされてたかと思います。
ですので、CoffeeScriptではよほどなケース(Classのコンストラクタ等)以外では定義することが出来ず、下記一択となります。

# CoffeeScript a = -> # 処理 # JavaScript var a; a = function() { // 処理 };

クラスやインスタンス的なものもCoffeeなら下記一択です。
一応JS的に懇切丁寧に書く事も可能です。

# CoffeeScript class class1 constructor: (@name)-> amount: null instance1 = new class1() # JavaScript var class1, instance1; class1 = (function() { function class1(name) { this.name = name; } class1.prototype.amount = null; return class1; })(); instance1 = new class1();

回答

インスタンス化によるメモリ浪費を防ぐため、不要なものはグローバル関数にしています。

これは逆では?
ガベージコレクションに乗せて殺す為にクロージャーに包んでローカルで宣言したほうが良さそうです。

JavaScriptにおけるメモリの浪費を避けるコーディング
http://utage.headwaters.co.jp/blog/?p=1116

「JavaScript ガベージコレクション」等で検索すると色々記事が出てくるので、シビアに追求するなら読んで見ると良いかと思います。

投稿2016/02/09 16:21

編集2016/02/10 01:18
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こちらの記述が参考になるかと思います。
http://postd.cc/javascript-best-practices-part-1/

グローバル変数で定義した連想配列の中に各関数を入れることで、
グローバル関数を1つに抑えるアプローチもあります。

JavaScript

1var PROJECT = PROJECT || {}; 2 3PROJECT.class1 = function(){ 4 this.init(); 5}; 6 7PROJECT.class1.prototype = { 8 init: function(){...}, 9 bindEvent: function(){...} 10}; 11 12PROJECT.class2 = function(){ 13 this.init(); 14}; 15 16PROJECT.class2.prototype = { 17 init: function(){...}, 18 bindEvent: function(){...} 19}; 20 21// PROJECT内のSAMPLEキー内に連想配列を用意。 22// もし、別箇所で既に設定されている場合、それを引き継ぐ。 23PROJECT.SAMPLE = PROJECT.SAMPLE || {}; 24 25PROJECT.SAMPLE.class1 = function(){ 26 this.init(); 27}; 28 29PROJECT.SAMPLE.class1.prototype = { 30 init: function(){...}, 31 bindEvent: function(){...} 32}; 33

投稿2016/02/11 13:07

編集2016/02/11 13:08
yamato_hikawa

総合スコア2092

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

これだけの情報ではなんともいえませんが、
効率なんて数十万も数百万もインスタンスを作ったりするのでなければ過度に気にする必要はありません。
あなたにとって書きやすい書き方が最も正しいです。

投稿2016/02/09 22:43

編集2016/02/09 22:44
jser

総合スコア100

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問