タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

design_patternとjavascriptに関するpipeheadのブックマーク (12)

  • クロージャ再考 - Qiita

    はじめに 中級以上のJavaScriptプログラマを目指す上で、避けては通れない壁の一つは クロージャ(Closure) だと思います。「関数の外側で定義された変数を持つ関数の実行時オブジェクトです」とさらっと説明されることが多いですが、シンプルなだけに理解したつもりになって実は使いどころが分からないってことになりがちです。きちんと自分のものにするには基から丁寧に理解しないとダメですねってことで、今回はクロージャについてその背景から調べてみたいと思います。 歴史と語源 まずは歴史から振り返ってみたいと思います。Wikipediaによるクロージャの解説では、以下のような説明があります。 クロージャの概念は、1960年代にラムダ計算の機械的な実行モデルを構築するために生み出され、1970年に 静的スコープ と 第一級関数 をサポートするPALプログラミング言語で最初に実装された。1964年、

    クロージャ再考 - Qiita
    pipehead
    pipehead 2015/09/14
    束縛変数, 自由変数, 環境, 第一級関数, 高階関数, レキシカルスコープ (静的スコープ), ダイナミックスコープ, アクティベーションレコード (スタックフレーム), コールスタック, FUNARG 問題, クロージャ, モジュールパターン
  • ステップアップのためのJavascriptデザインパターン入門(5) 【シングルトンパターン】

    このブログでのデザインパターン連載も5回目になってやっと連載らしくなってきました。 引き続き今回はシングルトンパターンを紹介します。 シングルトンパターン オブジェクトのインスタンスの生成を1つに制限する、というのがシングルトンパターンです。 手軽に実装するには以下のようにオブジェクトリテラルを使用することで実装できます。 var Singleton = { prop: 1, another_prop: 'value', method: function() {…}, another_method: function() {…} }; しかし、これではプライベート・パブリックの区別ができません。全てのプロパティ、メソッドにアクセスできてしまいます。 シングルトンパターンの常套手段としては、インスタンスが作成されていなかったら作成し、すでに作成されている場合はそのインスタンスを返します。 サ

    ステップアップのためのJavascriptデザインパターン入門(5) 【シングルトンパターン】
    pipehead
    pipehead 2014/09/21
    Singleton パターン
  • ステップアップのためのJavascriptデザインパターン入門(4) 【リビーリングモジュールパターン】

    今回はリビーリングモジュールパターンを紹介します。 リビーリングモジュールパターン このパターンはクリスチャン・ヘイルマンという人による、モジュールパターンを改良したパターンです。 全ての関数と変数をプライベートスコープ内で定義し、パブリックメンバとして公開したいプライベートメンバへのポインタを持つ無名オブジェクトを返します。 var myRevealingModule = function() { var privateVar = 'Hoge', publicVar = 'Foo'; function privateFunction() { console.log('Name:' + privateVar); } function publicSetName(strName) { privateName = strName; } function publicGetName() { pr

    ステップアップのためのJavascriptデザインパターン入門(4) 【リビーリングモジュールパターン】
    pipehead
    pipehead 2014/09/14
    Revealing Module パターン
  • ステップアップのためのJavascriptデザインパターン入門(3) 【モジュールパターン】

    前回はコンストラクタパターンについて紹介しました。 今回はモジュールパターンについて紹介します。 モジュールパターン 従来のJavascript以外でのモジュールパターンというのは、クラスにパブリックとプライベートの両方のカプセル化をもたらす方法でした。 しかし、前回Javascriptにはクラスの概念が無いということを書きました。 Javascriptではクラスのような実装をモジュールパターンで再現することができます。 モジュールパターンを使用することで、1つのオブジェクトにパブリック・プライベートなメソッドや変数を取り込み、グローバルから特定の部分を隠蔽できます。 グローバル空間での変数名や関数名の衝突がしづらくなるわけです。 モジュールパターンでは、クロージャを使い変数やメソッドの隠蔽を実現します。 var testModule = (function() { // カウンタ変数 v

    ステップアップのためのJavascriptデザインパターン入門(3) 【モジュールパターン】
    pipehead
    pipehead 2014/09/10
    Module パターン
  • ステップアップのためのJavascriptデザインパターン入門(2) 【コンストラクタパターン】

    前回は第1回目ということで、そもそもデザインパターンとはなんぞや?という話に触れました。 今回から具体的なデザインパターンについて紹介していきます。 コンストラクタパターン コンストラクタ(Constructor)とはオブジェクトを作成し、初期化する関数のことです。 コンストラクタはJavascript以外の言語では「クラス」と呼ばれています。 プロトタイプベースの言語であるJavascriptでは、クラスの概念がありませんが、コンストラクタを作成することでクラスに似たオブジェクトを作成することができます。 コンストラクタは、オブジェクトを使用するための準備を行い、引数を受け取りオブジェクトの初回作成時にメンバのプロパティやメソッドに値を設定するのに利用します。 // コンストラクタを定義する function Person(name, age) { this.name = name; t

    ステップアップのためのJavascriptデザインパターン入門(2) 【コンストラクタパターン】
    pipehead
    pipehead 2014/09/09
    Constructor パターン
  • Javaプログラマから見たJavaScriptデザインパターン(アクセス制御編 其の壱) - Qiita

    シリーズは、構想段階ではデザインパターンを淡々と列挙していく記事にしようと思っていたが、なかなかまとまらないので、備忘録ついでに今考えていることをそのまま投稿してしまうことにした。 (訳:いきあたりばったりで体系的ではありません。) ## 出来ればそのうち整理しよう…。 ※ JSの知識には自信ないので間違った点に気付いた方がいらしたらコメント等でご指摘いただけると助かります。 ※ 稿は直接的な「デザインパターン」についてはあまり焦点があたっていないのでご了承ください。 0.はじめに 編案内 Moduleパターンを利用したアクセス制御について紹介する。 編を通して、JSにおけるアクセス制御の一例を見てみる。 シリーズ案内 Javaプログラマから見たJavaScriptデザインパターン(導入編) シリーズの前提条件及びModule、Singleton、FactoryMethodパター

    Javaプログラマから見たJavaScriptデザインパターン(アクセス制御編 其の壱) - Qiita
    pipehead
    pipehead 2014/09/07
    Interceptor パターン
  • Javaプログラマから見たJavaScriptデザインパターン(導入編) - Qiita

    仕事などでJSを書くようになって少々経つが、Java信者で頭が固い僕にとってはどうもJSというのは柔らかすぎてしっくりこない部分が多い。 考え方を整理するにはデザインパターンを知るのが早いと、最近思い立ったので改めて調べてみた。 ということで、Javaは大体分かるし、JSも書くけどそこまで詳しくない人向け(つまり自分主体)にまとめておく。 今のところシリーズ化予定。 ※ JSの知識には自信ないので間違った点に気付いた方がいらしたらコメント等でご指摘いただけると助かります。 ※ デザインパターンとして挙げているコードは、個人的にアレンジしている場合がありますので、ご了承ください。 0.はじめに 編案内 内容に入る前に、予備知識をおさらい。要点ではないのでざっくり。 シリーズ案内 Javaプログラマから見たJavaScriptデザインパターン(導入編) Javaプログラマから見たJavaSc

    Javaプログラマから見たJavaScriptデザインパターン(導入編) - Qiita
    pipehead
    pipehead 2014/08/27
    Module パターン, Singleton パターン, FactoryMethod パターン
  • Reveling Prototype Patternについて - Hachirog

    前回はReveling Module Patternについて書きました。JavaScriptでもprivateとpublicの領域を明快に分けられるという利点がありましたが、複数のインスタンスを作る際に、privateな関数もpublicな関数ももろもろが複製されるので、あまり効率が良くなさそうというのが懸念でした。 そこで、その点を補ったのがReveling Prototype Pattern(リビーリングプロトタイプパターン)ということで、紹介記事を読んで試してみました。 Revealing Prototype Pattern - Techniques, Strategies and Patterns for Structuring JavaScript Code - Dan Wahlin Revealing Prototype Patternによるオブジェクトの作り方 //最初にコン

    Reveling Prototype Patternについて - Hachirog
  • Revealing Module Patternで盲点だったこと - Hachirog

    これまで業務ではJavaScriptを場当たり的にコーディングしてきたので、今年は基的なところから見直そうと思っています。JavaScriptの実装でいつもに気になっていたのがオブジェクトの生成で、どういった書き方が定石なのか、で調べてもネットで調べてもいろいろ意見があって悩ましいところでした。 その中で、良さそうと思ったのが『JavaScriptデザインパターン』の中でも紹介されている「リビーリングモジュールパターン(Revealing Module Pattern)」です。 JavaScriptデザインパターン 作者: Addy Osmani,豊福剛,サイフォン合同会社出版社/メーカー: オライリージャパン発売日: 2013/05/25メディア: 大型この商品を含むブログ (6件) を見る Revealing Module Patternによるオブジェクトの作り方 『JavaSc

    Revealing Module Patternで盲点だったこと - Hachirog
  • javascriptのモジュールパターンとprototype継承について - tanihiro.log

    jsを書くとき、今まであまりprototype継承を使用せず、どちらかというとモジュールパターンで記述することが多かったので、それぞれ何が違うのか、あまり理解していませんでした。 それを今日教えてもらえたので、まとめます。 モジュールパターンとは function Hoge() { var n = 1; return { fuga: function() { alert(n); } }; } var hoge = new Hoge; hoge.fuga(); // 「1」がalertで表示される hoge.n; // Error このように、関数の返り値をobjectで返し、さらにそのobjectの中にfunctionを用意します。 fugaの中で参照しているnはクロージャの中で生き続けるので、外からでもアクセスできますが、直接は参照できません。 この、クロージャを利用してprivateや

    javascriptのモジュールパターンとprototype継承について - tanihiro.log
    pipehead
    pipehead 2013/11/21
    > モジュールパターンはprivateな変数やメソッドを簡単に定義できるが、継承はできない
  • JavaScriptのIIFEとモジュールパターン | fenomas.com

    他の多くのフラッシャーと同じく、最近色々HTML5開発を触ってみている。(現時点ではEdge Animateで色々を。)で、JSはAS3とかなり似ているため、それほど慣れにくくはない。(ほとんどのJSはAS3としてでもコンパイルできるし。JSを横目で見たら、変数の型を宣言しない人が書いたAS3と見間違えられる。) ただしJSとAS3は似ている言語にしても、使われる方言が違う。例えばこれ: 最初は「はあ?」と思った。でもJSにはよ〜くあるのだ。このパターンは英語圏で「IIFE」(イッフィー)とよばれる:「Immediately-invoked function expression」。つまり即時に実行される関数エクスプレッション。まあ、コードを見ればそういうもんですね。(@spacelogueさんによると日語では即時関数というんだって) まあそれはそれで良いんだが、何のために使うのだろう?

    pipehead
    pipehead 2013/06/06
    IIFE: Immediately-invoked function expression (即時関数)
  • 最速インターフェース研究会 :: JavaScriptのデザインパターン - Singleton

    JavaScriptじゃねえと書けねえよ、ってやり方でデザインパターンを実装してみるコーナー。とはいってもデザインパターンとか良くわからないので適当に覚えながら作る。 間違ってる箇所あったらつっこんでくれるとありがたいです。 わかりやすい文章を書く能力が欠如してるのでデザインパターンって何だとかそういうのはこっち参照。 http://d.hatena.ne.jp/naoya/20050813/1123924312 JavaScriptのコンストラクタはPerl同様自在に定義できます。returnでobjectを返してやれば、newの結果としてそいつを使います。 普通にシングルトンなクラスを実装するにはこんな感じだと思います。 function Singleton(){ var self = arguments.callee; if(self.instance == null){ this.

  • 1