__proto__プロパティ周りでJavaScript実装によっていろいろ挙動が異なることが分かったのでメモ。 以下のブラウザ(エンジン)で調べた Firefox 9.0.1 (Gecko 20111220165912) GoogleChrome 17.0.963.12 dev-m (v8 ???) Opera 12.00 alpha (Presto 2.10.238) また、GoogleChromeとNode.jsでの結果は同じだった。 var bind = Function.prototype.bind, hasOwn = bind.bind(bind.call)(Object.prototype.hasOwnProperty), proto = Object.getPrototypeOf; Object.prototype の __proto__ Object.prototype の
2011年12月16日15:00 カテゴリLightweight Languages javascript - そろそろECMAScript 5を使いたい少なくとも3つの理由 下準備も終わったので、本blogで扱うJavaScriptは、特に断りのない限りECMAScript 5を前提にしていくことにします。 0. どのブラウザーで使えるの? 以下で確認できます。 ECMAScript 5 compatibility table ざっといろいろ試してみると… IEは9以上以降かつStandard Modeなら使える Safari 5はFunction.prototype.bindのみ使えない - 5.1.4より[native code] iOS5も同様 Android 2.3ではさらに加えてObject.sealなどObjectをロックする機能が使えない というわけで、もう使いはじめてもい
Twitterで垂れ流したのを適当にまとめる。 JSでライブラリ作るときは組み込み型のプロトタイプに触れないことがマナーになってるっぽい雰囲気あるけど、デファクトなライブラリがあったら明示して使っていいと思うんだけどなーってprototype.jsの死骸を眺めつつunderscore.jsのドキュメント読んでた http://documentcloud.github.com/underscore/ まあ mapとかcollectとか、最新のV8やGeckoならサポートされてるわけで、IEのことを気にしだすとこういうライブラリに依存するんだろうが… 僕は prototype.js のように組み込みプロトタイプを拡張するの全然構わないと思ってる。のだけど、あくまで共通認識を得たそういうライブラリじゃないと受け入れられないわけで、underscore.js はその現代版を目指してるのかなといった
JavaScriptで一番簡単にオブジェクト指向プログラミングを行う方法 (id:perlcodesample) 私は特にJavaScriptに詳しいわけではなく、オライリーの『JavaScript』、通称サイ本を読んだ程度なのですが、私の知るかぎりJavaScriptでオブジェクト*1を定義する方法には二つの軸があります。一つ目はオブジェクトの生成方法で、二つ目はメソッドの与え方です。すなわち: new演算子で生成する / オブジェクトリテラルで生成する prototypeによってメソッドを生やす*2 / プロパティを直接代入してメソッドを生やす これについて具体的に説明してほしいとのことでしたので、以下にこの二つの軸の組み合わせ、計4つの方法を示します。 (実行可能なコードはjsdo.itにて: http://jsdo.it/gfx/9LR3) var pointToString =
マクラ JavaScriptを使っている人なら知っていることだろうけど、JavaScriptはプロトタイプベースのオブジェクト指向を採用しているので「クラス」がない。オブジェクトしかない。 でも、組み込みの演算子としてnewがあって、それを使って var obj = new Object(); とか書けちゃう。クラスってものはJavaScriptにはないはずなのに、new ClassName();と書くとあたかもClassNameクラスのオブジェクトのインスタンスが生成され、それが返ってくるかのような挙動をしている。 これは気持ち悪い。言語仕様としてはクラスは本来存在しないのに、クラスのようなものが導入されている。まともな神経を持った人間なら、一体new演算子って何なの?という疑問を持つのが当たり前である。「{}はnew Object()のシンタックスシュガーです」とか言ってふんぞり返って
2006年10月18日21:00 カテゴリLightweight Languages javascript - プロトタイプ的継承完全版 Kazuho@Cybozuさま、いつもありがとうございます。 Kazuho@Cybozu Labs: JavaScript の String 型を継承する 結論から言うと、String 型も継承っぽいことができます。こんな感じ。 おかげでプロトタイプ的継承モデルの完全版が出来ました。 AtomicなObjectを継承 これは、以下のように包括的に出来ます。 var Atomic = function(C){ var P = function(v){ this._v = v; }; P.prototype = new C; P.prototype.valueOf = function(){ return this._v.valueOf(); } P.pro
最近、プロトタイプ的継承の話しが盛り上がっています。 http://blog.livedoor.jp/dankogai/archives/50662064.html http://labs.cybozu.co.jp/blog/kazuho/archives/2006/10/javascript_string.php http://blog.livedoor.jp/dankogai/archives/50662606.html 最終形がやたら複雑になっています でも、実際はあそこまで複雑に書かなくても、できると思います ^^; そう思う理由 P 関数は object 関数の中でローカルのものである。コンストラクタとして使える必要はない。なので、 Atomic な場合でも P は function(){} でいい。 method 関数では P.prototype のプロパティに関数が代入されて
2006年10月19日11:30 カテゴリLightweight Languages javascript - Prototypal Object Modelの落とし穴 「404 Blog Not Found:javascript - プロトタイプ的継承」とその続編「404 Blog Not Found:javascript - プロトタイプ的継承完全版」は、案の定反応すべきbloggersが然るべき反応をしてくれた。これをbloggingの魅力と言わずしてなんと呼ぼうか。 プリミティブ値でもプロトタイプ的継承: Days on the Moon 書き上げた後に元記事の続きが出ているのに気づいたが、方向性が違うようなのでそのまま掲載。 IT戦記 - 関数一発でプロトタイプチェーンに繋げて、オブジェクトをクローンする。でも、実際はあそこまで複雑に書かなくても、できると思います ^^; 感想は
2006年10月18日09:20 カテゴリLightweight Languages javascript - プロトタイプ的継承 がーん。この感動はY combinatorを見たときに匹敵する。 Prototypal Inheritance function object(o) { function F() {} F.prototype = o; return new F(); } なぜこれがそれほど感動的かというと.... これを使えば、ArrayやObjectといったBuilt-Inからも難なく継承できるから。 継承のやり方としてはPrivate Members in JavaScriptが圧倒的に有名で、日本でもbrazilさんによる邦訳、Collection & Copy - JavaScriptにおける古典的継承もよく知られていると思うけど、この三行を目の前にしては霞む。でもp
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く