次回も可能であれば参加したいです。
5.4 関数型
写経
var mammal = function(spec) {
var that = {};
that.get_name = function () {
return spec.name;
};
that.says = function() {
return spec.saying || '';
};
return that;
};
内部にプライベートなthatを用意してカプセル化を実現
var dog = mammal({name:"Dog", saying: "Bow"});
document.writeln(dog.get_name()); // Dog
dog.name = "Cat";
document.writeln(dog.get_name()); // Dog
引数が分かりづらいのでこうして見る
- 型チェックの追加
- specに必要なkeyを明示的にする
改善後
var mammal = function(spec) {
var that = {};
if ( typeof spec === 'object' && spec ) {
} else {
throw "spec should be an object';
}
var name = spec.name || 'mammal';
var saying = spec.saying || '';
that.get_name = function() {
return name;
};
that.says = function() {
return saying;
};
return that;
};
改善前のはspecを先に定義しておけば、nameを書き換えられる
var dogSpec = { name: "Dog", saying: "Bow" };
var mydog = mammal(dogSpec);
console.log(mydog.get_name()); // Dog
dogSpec.name = "Cat";
console.log(mydog.get_name()); // Cat
改善後のように変数、関数を別定義にしておけばちゃんとカプセル化される
Q. 最初に出てきた引数myは必要なのか?
var mammal = funciton (spec, my) {
// 省略
};
A. 本に使用例も出てきてないし、誰もいい使い方が思いつかないから必要なさそう
親の関数をoverrideする前に変数に入れておけばOK
var coolcat = function(spec){
var that = cat(spec),
super_get_name = that.superior('get_name');
that.get_name = function(n) {
return 'like ' + super_get_name() + ' baby';
};
return that;
};
var myCoolCat = coolcat({name: "Bix"});
console.log(myCoolCat.get_name());
P.63までやった。次回は 5.5 オブジェクトのパーツ(P.64) から
LT
jQueryを読んでみよう @tricknotes さん
まずはgitからソースコードを持ってくる
git clone https://github.com/jquery/jquery.git
buildするにはREADMEを嫁
- node.js 0.2
- git 1.7
- GNU make 3.8
今のHEADは1.6.3pre
いきなりsourceを読んで前回敗北したのでtestを見ていく
- QUnitで書かれてる
- test/index.htmlをブラウザで開くと実行していく様子が見れる
- test/unit/*.jsがテストコード
- test codeから読むと何がしたいコードなのかわかるので、そこを頼りに読み解く
jQueryのcodeの中にはThe Good Partsがいっぱいある
var jQuery = (function(){})(); // 無駄なglobal varをつくらない
Sapporo.js-webの裏事情 @tricknotes さん
Sapporo.js-web
- nodeで動いてる
-
- 通常はxxxxx.no.deというドメインになる
- グローバルIPも貰える
- sshも使える
- git pushでdeploy
- 1ヶ月くらい申請でかかる!
- gcc v3.4.6, makeとかは入ってた
- solarisの模様
ベースはLooseleaf.JSで作成
githubでサイト自体も公開
@onjiro_mohyahya さんがテーマのベースを作るので、その後pull-requestをお待ちしてます
0 件のコメント:
コメントを投稿