JavaScriptに、applyとcallというメソッドが用意されていますが、自分なりにapplyとcallの丁寧に説明をしてみようと思ってこのエントリーを書くなどをしてみます。 applyとcallは非常に似たメソッドなので、まずはcallから説明します。 callメソッドとは? callメソッドは以下のように呼び出します。 methodA.call(thisArg, [, arg1 [, arg2, ...]]); methodAには任意の関数(メソッド)を指定します。 callの引数は第一引数にmethodAのthisとしたいオブジェクトを指定して、第二引数以降はmethodAに渡したい引数があれば、カンマ区切りでそれぞれ指定します。 callメソッドは、すべての関数が共通して持っているメソッドです。すべての関数はFunctionクラスのオブジェクトで、callはFunction.
arguments.lengthとarguments.callee.lengthは違う。 前者は、呼び指しされた際に割り当てられた引数の個数。 後者は、関数の定義してある引数の個数。 これらの値を比較してあげることで引数チェックが可能になる。 function check(args){ if(args.length === args.callee.length){ alert("same!!"); }else{ throw new Error("Request Arguments : " + args.callee.length + " but Your Arguments : " + args.length); } } function hoge(x, y, z){ try{ check(arguments); }catch(e){ console.debug(e); }finally{
HTML5のDrag and Drop APIは、Insider.NETの読者諸氏ならば習得が容易なはずだ。なぜなら、ドラッグ&ドロップの実装方法が.NET FrameworkのWindowsフォーム・アプリケーションのそれと類似しているからだ。 HTML 5のDrag and Drop APIの実装方法は「ドラッグ操作」と「ドロップ操作」に切り分けて考える必要があるが、この考え方はずばりWindowsフォーム・アプリケーションのそれと同様である。これは、Drag and Drop APIの設計にマイクロソフトが大きな影響を与えている点に由来している。 WHATWG(Web Hypertext Application Technology Working Group)がHTML5の仕様策定を進める際、「先進的な機能を実装しているブラウザの挙動を規格化する」という基本理念があった。マイクロソ
連載目次 ■Web Storageの概要と活用例 旧来(=HTML 4.1以前)のWebブラウザでは、eコマース・サイトのカート情報やログイン状態の管理情報などのデータをブラウザに保存する仕組みとして、大半のWebサイトではクッキーを利用していた。しかし、クッキーでは、保存容量が4KBytesまでであることや、すべてのリクエストに対してサーバにデータを自動で送信するため、容量制限やセキュリティ対策に悩まされることも多くあった。 HTML5では、クッキーに代わるデータ保存の仕組みとして、「Web Storage」と呼ばれる機能を利用できる。Web Storageは、ブラウザ側でKey-Value型でデータを保存する機能のことで、現在のインターネットを取り囲む環境に対応した「クッキーの後継技術」ともいえる。 Web Storageとクッキーの機能の差異は、以下の表のとおりだ。
JQuery コアのスタイルガイドライン内容 1 JSLint 2 余白 3 コメント 4 Equality 5 ブロック 6 関数呼び出し 7 配列とオブジェクト 8 代入 9 型チェック 10 正規表現 11 文字列 12 ノード JSLINT jQuery コアはいくつかの条件を指定して JSLint を通しています。 jQuery に対して JSLint を実行するために、Git から jQuery をダウンロードして、 ‘make lint’ を実行することができます。 JSLint が出力する以下の警告を無視しています: “Expected an identifier and instead saw ‘undefined’ (a reserved word).” “識別子を期待していますが、’undefined’(予約語)が見つかりました” - j
型の判定をするときに「typeof」とか「instanceof」とか「==」とかしょっちゅう忘れる。 あとDOM要素もwindowだったりHTMLElementParagraphElementとかいろいろあってややこしや。 この辺、jQueryのisArray()やisFunction()ではどうやってるんだろと見てみると、「Object.prototype.toString.call(v)」でやってた。 いろいろな型で試してみたところ、これで全部いけるじゃん!と分かったので、まとめたやつを作ってみた。 ・type.js /** * Decision type of variable. * @class Type * @static */ var Type = { isObject: function(v) { return (Object.prototype.toString.call(
こんにちは。 KRAYアルバイトの浅海です。 今回は、最近ちまたで噂のThree.jsで遊んでみようとおもいます。 http://github.com/mrdoob/three.js webgl対応のブラウザで見ている方は、右上に3Dのボックスが表示されていると思います。 Three.jsを使えば、このようなことを簡単にJavascriptで実現できるのです。 半信半疑で使ってみたところ、たしかにThree.jsでは、3D特有の行列計算や数学的思考をせずとも、3Dを表示、操作することができました。 「ちょっとのプログラムで3Dができる。」 この面白さを皆さんに届けたいです。 目次 立方体を表示する 光をあてる テスクチャを貼り付ける マウスで回転させる マウスで移動させる クリック判定する Three.js web上には、HTML5のcanvasを利用した様々なサンプルページやアプリケーシ
2012年01月16日16:30 カテゴリアルゴリズム百選Lightweight Languages Algorithm - Suffix Array を JavaScript で再発明してみた WEB+DB 総集編 [Vol. 1〜60] もう10年以上前に某社のCTOだったころ、Suffix array(接尾辞配列)の解説を毎週の技術者ミーティングでしたら一名を除いて「ハァ?」状態だったことを思い出しつつ。 Suffix Arrayは何が画期的だったのか? 以下は、計算機科学者でなくても直感的に理解できると思います。 ソートされていない通常のデータの中にあるサブデータ(キー)を検索しようとすると、データの大きさに比例した時間(O(n))がかかる。 ソート済みのデータであれば、二分探索でデータの大きさの対数時間(O(logn))でキーを検索できる。 さらにキーからIDを定数時間で作成でき
2012年01月15日18:30 カテゴリLightweight LanguagesTips tips - 動的配列と空要素と要素の列挙 動的配列は便利ですが、言語ごとの違いにはちょくちょく悩まされます。 JavaScript: The Definitive Guide (6th Ed.) David Flanagan 連想配列のlengthプロパティ - 馬鹿と天才は紙一重って使えないんですね。 var array = []; array["a"] = "string a"; array["b"] = "string b"; console.log(array.length); 見事に0が返ってきます。意味が分かりません。 perl5 最も直感的な実装。 要素数:最大の添字+1 列挙:要素が空でもなされる use 5.012; my @fizzbuzz; for my $i (1..30
2011年12月18日15:30 カテゴリLightweight Languages javascript - Function.prototype.bindを無理矢理捕縛してみた +1。 Function.prototype.bindは何がいいのか - 枕を欹てて聴く というわけでFunction.prototype.bindは単なる簡単な追加機能とか補足みたいなのじゃなくて, 凄まじい新機能(call, applyに匹敵)で, かつ非常に奥が深いのでした. なのにSafariとiOSとAndroidでサポートしてないなんて。あんまりだよ、こんなのってないよ。 Prototype.jsにあった、ような… Prototype.jsのころはこんな感じでした。 var oBind = Function.prototype.bind; /* preserve the original */ Fu
F F an Study I I kon Pass Destinations G G lobeKit I I kon AR Maps E E xperience Center E E ven B B oundary Supply J J aybird I I n-Car Navigation T T actical Mapping I I nside Design Y Y ouMap C C hat F F ranklin Square S S NKRS F F ox Sports S S tance G G lobal Payments L L uxe Valet E E picurrence B B oston Globe G G enworth W W orld Atlas E E SPN FC M M erchant App C C ity Guides N N ational P
2012年01月06日23:15 カテゴリLightweight Languages javascript - 比較(comparison)と変換(coercion) JavaScript: The Good Parts Douglas Crockford / 水野貴明訳 [原著:JavaScript: The Good Parts] 大事なことなので何度でも言うべきでしょうか。 [javascript]true or false 論理値の挙動については、いまいち感覚的に理解しにくい印象です Crockfordの言う通り、===と!==を使いましょう。 Demo ==と!=がいかに挙動不審かを、実際に表にします。textareaには表に入れたい値を入力してみてください。void(0)と1/0とparseInt('nan')は、確実にundefinedとInfinityとNaNを得るための方
ユースケースとしては、テストの最初にあるシステムにログインしてユーザIDなりセッションIDなりを得て、それでもって残りのテストを実行するみたいな処理です。 これ、素直にJSDeferredでDeferred.next(...).next(...)と続けても、このnextのコールバックは最初にいきなり呼ばれたあと「待ち」に入るので、非同期で取ってきた値に依存した処理は書けないんですよね。 これは、Deferredオブジェクトを自分で作って制御すればいけるみたいです。 以下サンプルコードです。最初の100msかかる非同期処理で42という値を得て、それを次の処理に渡せることを確認します: #!/usr/bin/env node "use strict"; var Deferred = require('./jsdeferred.js').Deferred; Deferred. next(func
サーバサイド(特にNode.js)とクライアントサイド両方で動かしたいものは最近はこんな感じで書いている。 CommonJSのwiki見ててそこに紹介されてるソースコードで(どれだったか忘れたけど。。)やってたのを見ていいなーと思って真似っこした。 (function(define) { define([], function() { 'use strict'; /** * @constructor */ var SomeClass = function() { // initialize }; /** * @type {string} * @private */ SomeClass.prototype.hoge_ = 'hoge'; /** * @return {string} */ SomeClass.prototype.getHoge = function() { return th
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く