<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="ja" xml:base="http://www.findxfine.com/wp-atom.php">
	<title type="text">FindxFine »  | FindxFine -Web制作に関するメモ-</title>
	<subtitle type="text">Web制作に関するメモ</subtitle>

	<updated>2012-02-07T08:48:22Z</updated>

	<link rel="alternate" type="text/html" href="http://www.findxfine.com" />
	<id>http://www.findxfine.com/feed/atom</id>
	

	<generator uri="http://wordpress.org/" version="3.3.1">WordPress</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Findxfine" /><feedburner:info uri="findxfine" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
		<author>
			<name>findxfine</name>
					</author>
		<title type="html"><![CDATA[ページ全体をキャプチャするFirefox拡張機能 Pixir Grabber : Firefox]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Findxfine/~3/QZmiLiMvmjk/995555383.html" />
		<id>http://www.findxfine.com/?p=995555383</id>
		<updated>2012-02-07T08:48:22Z</updated>
		<published>2012-02-07T08:48:22Z</published>
		<category scheme="http://www.findxfine.com" term="Browser" /><category scheme="http://www.findxfine.com" term="Firefox" />		<summary type="html"><![CDATA[Screengrabは最新バージョンに対応していない(2012.02.07)。同じような機能を持つPixir Grabberをインストールした。 &#187; Pixlr Grabber]]></summary>
		<content type="html" xml:base="http://www.findxfine.com/browser/995555383.html">&lt;p&gt;Screengrabは最新バージョンに対応していない(2012.02.07)。同じような機能を持つPixir Grabberをインストールした。&lt;/p&gt;
&lt;span id="more-995555383"&gt;&lt;/span&gt;
&lt;p&gt;&amp;raquo; &lt;a href="https://addons.mozilla.org/ja/firefox/addon/pixlr-grabber/"&gt;Pixlr Grabber&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Findxfine/~4/QZmiLiMvmjk" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.findxfine.com/browser/995555383.html#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.findxfine.com/browser/995555383.html/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.findxfine.com/browser/995555383.html</feedburner:origLink></entry>
		<entry>
		<author>
			<name>findxfine</name>
					</author>
		<title type="html"><![CDATA[プロパティ : JavaScript]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Findxfine/~3/wBYMUSURBfc/995555352.html" />
		<id>http://www.findxfine.com/?p=995555352</id>
		<updated>2012-02-01T08:18:27Z</updated>
		<published>2012-02-01T08:16:27Z</published>
		<category scheme="http://www.findxfine.com" term="JavaScript" />		<summary type="html"><![CDATA[関数はオブジェクトなのでプロパティを設定できる。プロパティの分類。 クラスプロパティ クラスオブジェクトプロパティ, コンストラクタプロパティ。関数オブジェクトはクラスプロパティとしてデフォルトでlength, prot [...]]]></summary>
		<content type="html" xml:base="http://www.findxfine.com/programming/javascript/995555352.html">&lt;p&gt;関数はオブジェクトなのでプロパティを設定できる。プロパティの分類。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;クラスプロパティ&lt;br /&gt;
クラスオブジェクトプロパティ, コンストラクタプロパティ。関数オブジェクトはクラスプロパティとしてデフォルトでlength, prototypeを持つ。&lt;/li&gt;
&lt;li&gt;(インスタンス)プロトタイププロパティ&lt;br /&gt;
prototypeプロパティに設定したプロパティ。関数オブジェクトを拡張する。&lt;/li&gt;
&lt;li&gt;インスタンスプロパティ&lt;/li&gt;
&lt;/ul&gt;
&lt;span id="more-995555352"&gt;&lt;/span&gt;
&lt;pre&gt;
function Foo(value) {
    this.name = value;
    // インスタンスメソッド
    // インスタンスごとにメモリを確保するのでプロトタイプメソッドが効率的
    this._getName = function() {
        console.log(this.name);
    }
}
// クラスメソッド
Foo.getClassName = function() {
    console.log(this.name);
};
Foo.getLength = function() {
    console.log(Foo.length); // lengthはFooクラスオブジェクトのプロパティ   
};
Foo.getProto = function() {
    console.log(Foo.prototype); // prototypeはFooクラスオブジェクトのプロパティ
};
// プロトタイプメソッド
Foo.prototype.getName = function() {
    console.log(this.name);
};


// クラスメソッド(コンストラクタメソッド)
Foo.getClassName();      // Foo クラス(コンストラクタ)はオブジェクトなのでthisを参照できる。
Foo.getLength();         // 1
Foo.getProto();          // Foo.prototype
var f1 = new Foo('f1');
f1.getName();            // f1
f1._getName();           // f1
&lt;/pre&gt;

&lt;img src="http://feeds.feedburner.com/~r/Findxfine/~4/wBYMUSURBfc" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.findxfine.com/programming/javascript/995555352.html#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.findxfine.com/programming/javascript/995555352.html/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.findxfine.com/programming/javascript/995555352.html</feedburner:origLink></entry>
		<entry>
		<author>
			<name>findxfine</name>
					</author>
		<title type="html"><![CDATA[jQueryオブジェクトかどうかを調べる : jQuery]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Findxfine/~3/OnO5z2ZVvt8/995555314.html" />
		<id>http://www.findxfine.com/?p=995555314</id>
		<updated>2012-01-28T07:50:08Z</updated>
		<published>2012-01-28T07:50:08Z</published>
		<category scheme="http://www.findxfine.com" term="JavaScript Library" />		<summary type="html"><![CDATA[jQueryオブジェクトのインスタンスかどうかを調べるコード。 if ($(&#039;&#60;div&#62;Hello&#60;/div&#62;&#039;) instanceof jQuery) { console.l [...]]]></summary>
		<content type="html" xml:base="http://www.findxfine.com/programming/jlibrary/995555314.html">&lt;p&gt;jQueryオブジェクトのインスタンスかどうかを調べるコード。&lt;/p&gt;
&lt;pre&gt;
if ($(&amp;#039;&amp;lt;div&amp;gt;Hello&amp;lt;/div&amp;gt;&amp;#039;) instanceof jQuery) {
    console.log(&amp;#039;&amp;lt;div&amp;gt;Hello&amp;lt;/div&amp;gt; is jQuery Object&amp;#039;);
} else {
    console.log(&amp;#039;&amp;lt;div&amp;gt;Hello&amp;lt;/div&amp;gt; is not jQuery Object&amp;#039;);
}
if ({} instanceof jQuery) {
    console.log(&amp;#039;{} is jQuery Object&amp;#039;);
} else {
    console.log(&amp;#039;{} is Not jQuery Object&amp;#039;);
}
&lt;/pre&gt;

&lt;img src="http://feeds.feedburner.com/~r/Findxfine/~4/OnO5z2ZVvt8" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.findxfine.com/programming/jlibrary/995555314.html#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.findxfine.com/programming/jlibrary/995555314.html/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.findxfine.com/programming/jlibrary/995555314.html</feedburner:origLink></entry>
		<entry>
		<author>
			<name>findxfine</name>
					</author>
		<title type="html"><![CDATA[プライベート変数 : JavaScript]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Findxfine/~3/7WIsh8t7exg/995555268.html" />
		<id>http://www.findxfine.com/?p=995555268</id>
		<updated>2012-01-27T07:45:39Z</updated>
		<published>2012-01-26T09:00:20Z</published>
		<category scheme="http://www.findxfine.com" term="JavaScript" />		<summary type="html"><![CDATA[JavaScriptのオブジェクトで変数をプライベートにするメモ。varを使いローカル変数にする // xを参照できない。 var Foo = function(value) { var x = 'Private ' + [...]]]></summary>
		<content type="html" xml:base="http://www.findxfine.com/programming/javascript/995555268.html">&lt;p&gt;JavaScriptのオブジェクトで変数をプライベートにするメモ。varを使いローカル変数にする&lt;/p&gt;
&lt;pre&gt;
// xを参照できない。
var Foo = function(value) {
    var x = 'Private ' + value;
    this.y = 'Public ' + value;
};
Foo.prototype.getValue = function() {
    
    // return x;  x is not defined
    return this.y;
};
var f1 = new Foo('f1');
console.log(f1.getValue()); // Public f1


//  xを参照できるが値は全てのインスタンスで共有
// Bar.prototype.getValueがクロージャーになる
var Bar = function(value) {
    var x = 'Private ' + value;
    this.y = 'Public ' + value;
    // プロトタイプメソッド
    Bar.prototype.getValue = function() {
        return x + ' / ' + this.y;
    }
}
var b1 = new Bar('b1');
console.log(b1.getValue()); // Private b1 / Public b1
var b2 = new Bar('b2');
console.log(b2.getValue()); // Private b2 / Public b2

console.log(b1.getValue()); // Private b2 / Public b1 ※Privateはb2


// getValueをインスタンスメソッドにして各インスタンスごとに値を保持
var Hoge = function(value) {
    var x = 'Private ' + value;
    this.y = 'Public ' + value;
    // インスタンスメソッド
    this.getValue = function() {
        return x + ' / ' + this.y;
    }
}
var h1 = new Hoge('h1');
console.log(h1.getValue()); // Private h1 / Public h1
var h2 = new Hoge('h2');
console.log(h2.getValue()); // Private h2 / Public h2

console.log(h1.getValue()); // Private h1 / Public h1 ※Privateはh1
&lt;/pre&gt;


&lt;p&gt;インスタンスメソッドは各インスタンスがメソッドを持つことになるのでプロトタイプチェーンで参照されるprototypeで同じことができればそちらの方が効率的。&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Findxfine/~4/7WIsh8t7exg" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.findxfine.com/programming/javascript/995555268.html#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.findxfine.com/programming/javascript/995555268.html/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.findxfine.com/programming/javascript/995555268.html</feedburner:origLink></entry>
		<entry>
		<author>
			<name>findxfine</name>
					</author>
		<title type="html"><![CDATA[関数のメモ2 : JavaScript]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Findxfine/~3/L9yrqG4GSNk/995555066.html" />
		<id>http://www.findxfine.com/?p=995555066</id>
		<updated>2012-02-05T01:30:28Z</updated>
		<published>2012-01-05T06:31:55Z</published>
		<category scheme="http://www.findxfine.com" term="JavaScript" /><category scheme="http://www.findxfine.com" term="Programming" />		<summary type="html"><![CDATA[休み中に『パーフェクト JavaScript』を読んだのでJavaScriptの関数についてメモしておく。 JavaScriptの関数 JavaScriptの関数はオブジェクト。関数はオブジェクトなのでプロパティの追加や [...]]]></summary>
		<content type="html" xml:base="http://www.findxfine.com/programming/javascript/995555066.html">&lt;p&gt;休み中に『パーフェクト JavaScript』を読んだのでJavaScriptの関数についてメモしておく。&lt;/p&gt;


&lt;span id="more-995555066"&gt;&lt;/span&gt;


&lt;h2&gt;JavaScriptの関数&lt;/h2&gt;
&lt;p&gt;
JavaScriptの関数は&lt;em&gt;オブジェクト&lt;/em&gt;。関数はオブジェクトなのでプロパティの追加や変数への代入などオブジェクトに対する操作ができる。以後関数がオブジェクトであることを強調するときは関数を関数オブジェクトと書く。関数オブジェクトの特徴を『パーフェクト JavaScript』(p32)では下記のように説明している。
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;オブジェクトのすべてが関数という意味ではありません。関数は実行可能なコードを持ち、呼び出し可能という意味で(それなりに特別な)オブジェクトです。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;また『JavaScript: The Good Parts』(p3)は下記のように説明している。&lt;/p&gt;
&lt;blockquote&gt;JavaScriptの関数は、(大部分は)レキシカルスコープを持つファーストクラスオブジェクトである。&lt;/blockquote&gt;


&lt;h3&gt;prototypeプロパティ(explicit prototype property)と暗黙リンク(implicit prototype link)&lt;/h3&gt;
&lt;p&gt;
関数オブジェクトのprototypeプロパティ(explicit prototype property)は関数オブジェクトの機能を拡張する。また関数オブジェクトはFunction.prototypeへの暗黙リンク(implicit prototype link)を持つ&lt;sup&gt;[1]&lt;/sup&gt;。暗黙リンクを__proto__プロパティとして公開している実装もある。
&lt;/p&gt;
&lt;p&gt;
関数オブジェクトのprototypeプロパティはインスタンス&lt;sup&gt;[2]&lt;/sup&gt;に共通の機能を提供する。インスタンスの暗黙リンクは生成に使われた関数オブジェクトのpototypeプロパティを参照する。インスタンスの生成に使う関数オブジェクトをコンストラクタと呼ぶ&lt;sup&gt;[3]&lt;/sup&gt;。つまり生成されたインスタンスの暗黙リンクはコンストラクタのprototypeを参照する。
&lt;/p&gt;

&lt;h3&gt;プロトタイプチェーン&lt;/h3&gt;
&lt;p&gt;プロトタイプチェーンのまとめ。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;インスタンはコンストラクタのprototyepへ暗黙のリンクを持つ。&lt;/li&gt;
&lt;li&gt;関数オブジェクトはFunction.prototypeへの暗黙のリンクを持つ。&lt;/li&gt;
&lt;li&gt;1,2以外のオブジェクトはObject.prototypeへ暗黙のリンクを持つ(prototypeプロパティもオブジェクトなのでObject.prototypeへ暗黙リンクを持つ)。&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;
// コンストラクタ
function Foo(value) {
    this.value = value;
}
// Fooを拡張
Foo.prototype.showValue = function () {
    console.log(this.value);
}
// インスタンス生成
var ins1 = new Foo('ins1');
var ins2 = new Foo('ins2');

// インスタンスのプロトタイプチェーン
console.log(ins1.__proto__ == Foo.prototype);    // ture
console.log(ins1.__proto__.__proto__ == Object.prototype); // ture

// 関数オブジェクト(Foo)のプロトタイプチェーン
console.log(Foo.__proto__ == Function.prototype);
console.log(Foo.__proto__.__proto__ == Object.prototype);
&lt;/pre&gt;


&lt;p&gt;» &lt;a href="https://cacoo.com/diagrams/7ddBp0d3ARxvkag7"&gt;プロトタイプチェーンの図&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;プロトタイプベース&lt;/h3&gt;
&lt;p&gt;JavaScriptはオブジェクトの共通したの機能・振る舞いを(型)をJavaのようにクラスやインターフェースではなくpototypeを使って実現する。またプロトタイプオブジェクトはコンストラクタ自体ではなくそのprototypeオブジェクトを指す&lt;sup&gt;[4]&lt;/sup&gt;。&lt;/p&gt;


&lt;p class="note"&gt;
[1] 暗黙リンクによりFunction.prototype.apply,Function.prototype.callといったFunction.prototypeオブジェクトのメソッドをすべての関数オブジェクトで利用できる
逆にすべての関数オブジェクトで利用する機能を追加する場合はFunction.prototypeを拡張すればよい(定義済みオブジェクトの変更は注意点も多い)。&lt;br /&gt;
[2],[3] 本記事はコンストラクタから生成したオブジェクト(関数オブジェクトではない)をインスタンスと書く。&lt;br /&gt;関数オブジェクトはどのような用途で使われるのかを見た目からは判別できない。 そのためにコンストラクタとして利用されるのに備えてprototype.constructorプロパティに自身を設定する。つまり関数オブジェクトのprototypeプロパティはデフォルトでconstructorプロパティを持ち値に関数オブジェクト自身が設定されている。 &lt;br /&gt;
» &lt;a href="http://www.findxfine.com/?p=995551143"&gt;constructor : JavaScript&lt;/a&gt;&lt;br /&gt;
[4] 『パーフェクト JavaScript』に分かり易い説明がある(p36)。
&lt;/p&gt;




&lt;h2&gt;関数定義&lt;/h2&gt;
&lt;p&gt;関数定義には関数宣言文と関数リテラルがある。関数宣言文も関数リテラルも下記のようにほとんど同じ文法をもつ。&lt;/p&gt;
&lt;pre&gt;
// 関数宣言文
function 関数名(引数) {
    // 処理
};
&lt;/pre&gt;


&lt;pre&gt;
// 関数リテラル
function 関数名(引数) {
    // 処理
}
または
function(引数) {
    // 処理
}
&lt;/pre&gt;


&lt;p&gt;
    関数リテラルでは関数名が省略できることを除いて形式的には関数宣言文も関数リテラルも同じ。働きもほとんど同じ。ただし関数宣言文と関数リテラルには下記のような違いがある。
&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;関数リテラルは関数名を省略できる。&lt;/li&gt;
    &lt;li&gt;関数リテラルは式なので値(関数オブジェクトへの参照)を返す。&lt;/li&gt;
    &lt;li&gt;巻き上げ処理の違い。&lt;/li&gt;
    &lt;li&gt;関数リテラルは行頭に書くことはできない(関数宣言文になる)。&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;関数リテラルは値を返す&lt;/h3&gt;
&lt;p&gt;関数宣言文なのか関数リテラルなのかは関数定義だけからでは判断がつかない場合がある。しかし前後の文脈で判断できる。&lt;/p&gt;
&lt;pre&gt;
var foo = function _foo() {
    // 処理
}
// または
var foo = function() {
    // 処理
}
&lt;/pre&gt;


&lt;p&gt;値を返す必要があるので関数リテラル。&lt;/p&gt;
&lt;pre&gt;
function foo() {
    // 処理
}
&lt;/pre&gt;


&lt;p&gt;行頭に書いてあるので(本人が関数リテラルのつもりでも)&lt;del&gt;関数リテラル&lt;/del&gt;関数宣言文。&lt;/p&gt;
&lt;pre&gt;
(function foo() {
    // 処理
})
&lt;/pre&gt;


&lt;p&gt;括弧()の中は値を返す必要があるので(本人が関数宣言文のつもりでも)関数リテラル。&lt;/p&gt;


&lt;h3&gt;関数宣言文と関数リテラルの違い -巻き上げ処理-&lt;sup&gt;[1]&lt;/sup&gt;&lt;/h3&gt;
&lt;p&gt;関数宣言文で定義した関数は宣言した位置に関わらず実行時にスコープの一番先頭に移動される。&lt;/p&gt;
&lt;pre&gt;
foo(); // 正常に処理
bar(); // エラー発生
	
// 関数宣言文
function foo () {
    // 処理
};
// 関数リテラル
var bar = function () {
    // 処理
}
&lt;/pre&gt;


&lt;p&gt;巻き上げ処理の例2。&lt;/p&gt;
&lt;pre&gt;
/* エラーは発生しない */
console.log(foo());
function foo() {
    return bar();
}
function bar() {
    return 'Hello World';
}
&lt;/pre&gt;



&lt;p&gt;&lt;ins&gt;追記 2012.02.05 変数も巻き上げ処理される。変数と関数の巻き上げ処理のまとめ。&lt;/p&gt;
&lt;pre&gt;
// 巻き上げ処理
//     変数
//         変数は巻き上げ処理がされる。
//     関数
//         関数宣言文は巻き上げ処理がされる。
//         関数宣言式は巻き上げ処理されない。

// 「変数」の巻き上げ処理が行われる。
//  関数宣言文は同時に関数の巻き上げ処理も行われる
// 値はundefined
// foo is not defined, bar is not definedではない
console.log(foo); // foo(value)
console.log(bar); // undefined * bar is not definedではない
// 関数宣言文は「関数」の巻き上げ処理が行われる。
console.log(foo('Foo')); // Foo
// 関数宣言式は「関数」の巻き上げ処理が行われない。
// bar(); // bar is not a function  
     
// 関数宣言文
function foo (value) {
    return value;
};
// 関数リテラル
var bar = function (value) {
    return value
}
&lt;/pre&gt;



&lt;p class="note"&gt;
[1]『JavaScript: The Good Parts』(p132)では「「巻き上げ」」と記載している。 
&lt;/p&gt;



&lt;h2&gt;関数の実行&lt;/h2&gt;
&lt;p&gt;関数の呼び出しはドット演算子.やブラケット演算子[]を使って呼び出す&lt;sup&gt;[1]&lt;/sup&gt;。&lt;/p&gt;
&lt;pre&gt;
var hoge = fucntion () {
    // 処理
}
window.hoge();
window['hoge']();
&lt;/pre&gt;



&lt;h3&gt;即時実行&lt;/h3&gt;
&lt;p&gt;
    即時実行はグローバル変数を使わなくてすむというメリットがある。
&lt;/p&gt;
&lt;pre&gt;
// 行頭にfunctionを書くと必ず関数宣言文と解釈される。
// 関数宣言文は値を返さないので下記は(即時)実行されない
function myAlert(message) {
    console.log(message);
}('Foo'); // 実行されない

// 上記を避けるために()で囲む
// (function myAlert() {}())
// ()で囲むと値を返す必要があるので関数リテラルになる。
// 関数リテラルの返す値は関数オブジェクト参照
(function myAlert(message) {
    console.log(message);
}('Foo')); // 実行結果 Foo

// 関数リテラルは関数名を省略できる。
// デバック以外にmyAlertを付ける意味は無いので無名関数で書くのが普通。
(function(message) {
    console.log(message);
}('Bar')); // 実行結果 Bar

// 関数リテラルは関数オブジェクト参照を返すので下記のように書いても実行できる。
(function(message) {
    console.log(message);
})('Bar');
&lt;/pre&gt;


&lt;p&gt;即時実行で関数全体を括弧()で囲む理由は下記に詳しい解説がある。&lt;br /&gt;
» &lt;a href="http://d.hatena.ne.jp/amachang/20080208/1202448348"&gt;(function(){})() と function(){}() – IT戦記&lt;/a&gt;&lt;br /&gt;
» &lt;a href="http://blog.livedoor.jp/naoya_t/archives/50848512.html"&gt;紫ログ:Scheme脳で考える!! JavaScriptの関数とかクロージャとか &amp;#8211; livedoor Blog（ブログ）&lt;/a&gt;
&lt;/p&gt;



&lt;h2&gt;関数のプロパティ&lt;/h2&gt;
&lt;p&gt;関数はプロパティを設定できる。プロパティは下記のように分類できる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;クラスプロパティ( コンストラクタプロパティ,クラスオブジェクトプロパティ)&lt;br /&gt;
デフォルトではlengthプロパティ(仮引数の数)とprototypeプロパティ(拡張)がある。&lt;/li&gt;
&lt;li&gt;インスタンスプロトタイププロパティ&lt;/li&gt;
&lt;li&gt;インスタンスプロパティ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;raquo; &lt;a href="http://www.findxfine.com/?p=995555352"&gt;プロパティ : JavaScript&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;クロージャ&lt;/h2&gt;
&lt;p&gt;» &lt;a href="http://www.findxfine.com/?p=995551338"&gt;クロージャのメモ : JavaScript&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;再帰&lt;/h2&gt;
&lt;p&gt;» &lt;a href="http://www.findxfine.com/?p=995551512"&gt;再帰 : JavaScript&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;関数とthis&lt;/h2&gt;
&lt;p&gt;
	関数を呼び出すさい引数のほかにthisとargumentsというプロパティが渡される。
	関数がメソッドの場合のthisはメソッドを定義しているオブジェクトを指す。
	イベントハンドラ・イベントリスナーの場合はそれらを設定した要素を指す。
&lt;/p&gt;
&lt;p&gt;» &lt;a href="http://www.findxfine.com/?p=995550659"&gt;関数の呼び出しのthis : JavaScript&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;apply・callメソッド&lt;/h2&gt;
&lt;p&gt;
	すべての関数はプロトタイプチェーンでFunction.prototypeに暗黙リンクを持つ。
	Function.prototypeのメソッドは全ての関数で利用できる。ここではapply・callメソッドについて書く。
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
		Function.prototype.apply (thisArg, argArray)&lt;br /&gt;
		Function.prototype.call (thisArg [ , arg1 [ , arg2, … ] ] )
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;	
	p118 『ECMAScript Language Specification』 5th Edition / December 2009 Ecma International 2009&lt;br /&gt;
	»&lt;a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm"&gt;Standard ECMA-262&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;applayはthisArgで渡したオブジェクトをthisに設定して配列argArrayを引数として関数を実行する。callの場合は第2引数が配列ではなくスカラーになる。&lt;/p&gt;
&lt;pre&gt;
function fall (x) {
    this.a = 9.8;
    return -0.5 * this.a * Math.pow(x,2) + this.height
}

var fuji = {
    height: 3776    
}
var everest = {
    height: 8848
}

fall.apply(fuji, [10]); // 10秒後の位置 実行結果 3286
fall.apply(everest,[10]); // 10秒後の位置 実行結果 8358
&lt;/pre&gt;


&lt;p&gt;» &lt;a href="http://www.findxfine.com/?p=995552330"&gt;Function.apply, Function.call : JavaScript&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
	Javaのextendsにあたる明示的な継承手段をJavaScriptは提供していない。しかし実質的に継承に相当する機能を実現する方法がいくつかある。 applyを使って親オブジェクトのthisプロパティーを継承することができる。&lt;br /&gt;
        » &lt;a href="http://www.findxfine.com/?p=69"&gt;継承 : JavaScript&lt;/a&gt;
&lt;/p&gt;

&lt;p class="note"&gt;
井上誠一郎, 土江拓郎, 浜辺将太 2011 『パーフェクト JavaScript』技術評論社&lt;br /&gt;
Douglas Crockford著, 水野 貴明訳 2008 『JavaScript: The Good Parts』 オライリー・ジャパン
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Findxfine/~4/L9yrqG4GSNk" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.findxfine.com/programming/javascript/995555066.html#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.findxfine.com/programming/javascript/995555066.html/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.findxfine.com/programming/javascript/995555066.html</feedburner:origLink></entry>
	</feed>

