19. var Person = function (living, age, gender) {
this.living = living;
this.age = age;
this.gender = gender;
this.getGender = function () {
return this.gender;
};
};
var haraguchi_10 = new Person(true, 10, ‘male’);
var haraguchi_20 = new Person(true, 20, ‘male’);
var haraguchi_30 = new Person(true, 30, ‘male');
コンストラクタ関数
51. var myObject = {
myProperty: 'I can see the light',
myMethod: function () {
var self= this;
var helperFunction = function () {
console.log(self.myProperty);
console.log(this);
};
helperFunction();
}
}
myObject.myMethod();
window
myObject
thisを保持
60. カプセル化
var countUp = function () {
var count = 0;
return function () {
return ++count;
};
}();
console.log(countUp());
console.log(countUp());
console.log(countUp());
子関数からのみアクセス可能
スコープチェーンをだとる
スコープチェーンをだとる
スコープチェーンをだとる
61. クロージャ失敗例
var foo = function () {
var funcArray = [];
var i;
for (i = 0; i < 3; i++) {
funcArray[i] = function () {
console.log(i);
};
}
return funcArray;
}();
foo[0].();
foo[1].();
子関数からは共通のiにアクセス
関数の参照を保持
62. クロージャ成功例
var foo = function () {
var funcArray = [];
var i;
var func = function (i) {
return function () {
console.log(i);
};
}
for (i = 0; i < 3; i++) {
funcArray[i] = func(i);
}
return funcArray;
}();
独自に持つローカル変数変数
クロージャを配列に格納