Home > JavaScript

JavaScript Archive

JavaScript prototypeに触れる

JavaScript はじめてのクロージャ入門の続き。

今度はprototypeにメソッドを追加して、以下の結果が出るプログラムを作る。

var tanaka = new generateAgeCounter('1934-06-15');
console.log(tanaka.getDate('1968-07-14')); // 34
console.log(tanaka.getDate('1958-07-15')); // 24
var yoshida = new generateAgeCounter('1974-06-15');
console.log(yoshida.getDate('2005-07-14')); // 31
console.log(yoshida.getDate('2066-07-15')); // 92

Continue reading

JavaScript はじめてのクロージャ入門

JavaScript はじめてのクロージャ入門
というタイトルの割には、クロージャについてあんまり深く突っ込んでないなー。

問い 以下の結果が返ってくる関数を作りなさい。


var tanaka = generateAgeCounter('1984-06-24');
console.log(tanaka('2008-02-18')); // => 23
console.log(tanaka('1999-07-31')); // => 15

会社の先輩からクロージャを理解するため(かどうかは分からないけど)
にこのような問題を出して頂いたので考えてみる。

Continue reading

JavaScript argumentsオブジェクトとcalleeプロパティのお勉強

第2回 JavaScriptの関数をマスターしよう

↑このあたりとかオライリーサイ本124Pあたりを見ながら。


function factorial(x) {
    if (x <= 1)
        return 1;
    return x * factorial(x-1);
}

for (i=1; i<10; i++)
console.log(factorial(i));

で、こういう値が返ってくる。

1 2 6 24 120 720 5040 40320 362880

再帰関数か。かっこいいなー。
使いたいw


var factorial = function(n) {

if (n == 0) {
return 1;
} else {
return n * arguments.callee(n - 1);
}
}
for (i=1; i<10; i++)
console.log(factorial(i));

しかし、関数が匿名関数の場合はどうだろう。再帰処理に際して呼び出すべき名前がないので、この場合は、calleeプロパティを利用する必要があるというわけだ。

なるほど。無名関数の場合はargumentsオブジェクトの
calleeプロパティを使って参照すればいいのかー。

うん、珍しくきれいに納得できたーと思ったら

[参考]argumentsオブジェクトの実体

 厳密には、JavaScriptは関数呼び出しのタイミングで、ローカル変数や引数情報を、Activation Object(通称、「Callオブジェクト」とも呼ばれる)のプロパティとして格納している。argumentsオブジェクトも、その実体はCallオブジェクトのargumentsプロパティであある。

 Callオブジェクトは、アプリケーション側から明示的に生成したり呼び出したりすることはできないし、通常は意識することすらない存在であるので、本稿ではただ単に「argumentsオブジェクト」と呼ぶものとする。

ん、なんだ?Callオブジェクトのプロパティ?
Activation ObjectがCallオブジェクトって呼ばれるんだ。
Activation Objectか、名前はちらちら見るけれど。。
このへんはまだ理解できてないな><
雰囲気だけ分かる。そしてそれは分かったとは言わないのだけれど。

Home >

Page Top