![]() | 新品価格 |
[書評]オブジェクト指向javascriptの原則 1章を読んだ
の続編
2章は関数。
以下、2章
・巻き上げ
関数宣言と関数式では意味が違い
a()
function a(){}
は巻き上げられるが
以下は当然エラー
a()
a = function(){}
・sort
デフォルトは文字列比較
数字比較したい場合は無名関数を渡そう
sort(function(first, second)) {
fisrt - second;
});
・arguments
引数は全部これでとれる
任意の引数等だと使える子だけど可読性落ちるよ
・引数の長さ
function a(value){}
console.log(a.lenght);
は、1
function b(){}
console.log(b.lenght);
は、0
・オーバーロード
jsだとオーバーロードできないから
arguments使えばできるよねってhackもある
typeofやinstanceofで出しわけもできるよね
・this
thisを使うと動的に内容が変わるよ
function sayNameForAll(){
console.log(this.name);
}
var person1={
name: "person1",
say:sayNameForAll
};
var person2={
name: "person2",
say:sayNameForAll
};
var name ="person3";
person1.say(); //person1
person2.say(); //perons2
sayNemeForAll(); //person3
・call
thisを動的に変えてみよう
callの第一引数にthisを渡せる
function sayCall(label) {
console.log(label + ":" + this.name);
}
var person1 = {
name : "person1"
}
var person2 = {
name : "person2"
}
sayCall.call(person1, "a"); //a:person1
sayCall.call(person2, "b"); //b:person2
・apply
applyはcallで配列を渡す
sayCall.apply(person1, ["a"]);
sayCall.apply(person2, ["b"]);
・bind
ECMA5で追加されたthisが変わった関数を返す
var bind1 = sayCall.bind(person1);
bind1("label1"); //label1:person1
var bind2 = sayCall.bind(person1, "label2");
bind2(); //label2:person2
bind2("c");//label2:person2。cはたぶん第二引数
本章も大変ためになりました。
call apply bindをいけてる感じに使いこなせるようにならないと
そろそろいけないなぁーって感じです。
続く
タグ:javascript



