ボディーコーチジョー
年末のこの時期になると帰省の電車もピークになっている。早めに予約しておいてよかった。
昨日はボディーコーチジョーのトレーニングをやってみた。運動不足過ぎて身体がバキバキになってしまった。少しずつでも継続したい。
年末を少しでも生産的に過ごす。そのためのブログ
連休を少しでも気持ちよく過ごすため、やったことや勉強メモを残すためブログ再開。何もしない怠惰な日々は甘味のようで、過ぎてみれば自分を蝕む毒にしかならないと実感。
まずは太った身体をシェイプアップまでは行かずとも、運動の習慣をつけることを目標にしようと思う。
ここ数年で本当に太った。ちなみに、心にも脂肪のようなものがつくということを皆理解すべき。わかってないのは自分だけかな。。
JS勉強法
基礎を学ぶという点でいえば
この順番で読めばOK!JavaScriptを理解するための14冊
このサイトが書籍の紹介をしている様子。
私はパーフェクトJavaScriptを推奨しますね。
初めに読むにはほんの少しつらい本かもしれませんが分かり始めてから読むと非常に良い本だと思います。
そして学習に役立つのではないかという点で言えば
JavaScript初級者から中級者になろう
このサイトは比較的簡単に要点を説明してくれていると思います。
(情報の取捨選択は重要ですが)
また、ある意味万能なサイトが
MDN/開発者向けのWeb技術
MDN/JavaScript リファレンス
Lv1
まずビルドインのオブジェクトに何があるか理解する。
JavaScriptの奇妙なスコープを理解する。
JavaScriptの暗黙の型変換を理解する。
Lv2
JavaScriptにおけるオブジェクトとは何かを理解する(関数含めてすべてオブジェクト)
JavaScriptのコンストラクタを知る(コンストラクタをfunctionで作る)。
thisの特殊なふるまいを理解する。
JavaScriptのprototypeを理解する(自分はここで苦労しました)
JavaScriptのメソッドチェーンの作り方とは?と疑問を持つ。
JavaScript特有のシンタックスシュガーや特殊な機能(?)を知る。
callメソッド、applyメソッド、bindメソッドを使える。
DOM、StyleSheetなどをJavaScriptで操作できる。
ブラウザ間の実装に差異があることを理解する。(特にIE。凄くIEを気にする)
Lv3
prototype、コンストラクタ(JavaScriptでは関数)を用いた継承を完全に理解する。
DOMやCSSの操作を行うコードに関して適切なリファクトができる。
(もしくはそれに特化したライブラリなどを使用できる)
ブラウザ間の互換性を持たせることができる。
(もしくはそれを補完するライブラリのコードを理解できる)
OOP的設計(プロトタイプベース)を完全に理解し作成できる。
-
-
-
-
- -
-
-
-
MAX
デファクトスタンダードと呼ばれるレベルのライブラリを自作する
……のような感じでステップアップするのがいいですよね。上手く言えないのでLvとか残念な表現になりましたが。
(Lv2の範囲がかなり大きい気がしますがLv2後半からLv3まで行けば十分JavaScriptを使えると言っていい気がします)
プロトタイプ定義はオブジェクトリテラルで
こう書くことで可読性が上がるし、オブジェクト名の変更にも強くなるんだ!
下記のプロトタイプ定義の記述方法をオブジェクトのリテラル表記といいます。
var a = function(){document.writeln("aaa");} a.prototype = { outputAA : function(){return document.writeln('AA');}, outputBB : function(){return document.writeln('BB');}}; var c = new a(); document.writeln(c.outputAA()); document.writeln(c.outputBB());
プロトタイプオブジェクトを利用したメソッド定義
javascriptでガチガチのクラスを作ってはいけない。
なぜならインスタンス全てにそれらの定義がコピーされ、余計なメモリを食うからだ。
ということで、必要なメソッドはprototypeプロパティを使って定義しようという話です。
この場合、各インスタンスはメソッドの実体を持たず暗黙参照のみを持っているためスリムなのです。
var Member = function(firstname,lastname){ this.firstname = firstname; this.lastname = lastname; }; var member = new Member('tanaka','taro'); Member.prototype.getName = function(){ return this.firstname + this.lastname; }; document.writeln(member.getName());
calleeプロパティ
再帰を匿名関数で書きたいときとか使うらしいです。
//階乗を求めるfactorialメソッド function factorial(n){ if(n != 0){ return n * arguments.callee(n - 1);} return 1; } document.writeln(factorial(5));