2009年11月17日火曜日

関数が定義されるタイミング

[Javascript] 関数宣言の落とし穴 function foo ( ){..} と var foo = function ( ) {..} は動作が違うので要注意!にて勉強になった事。

引用。
function foo( ){ ... }
はコンパイル時に関数が定義されます。

var foo = function( ){ ... };
は代入文の実行時に関数が定義されます。


引用(エラーになるケース)
var foo = new Foo();
foo.greet();

function Foo(){ };
Foo.prototype.greet = function (){ alert('hi') };

var foo = new Foo();
foo.greet();

Foo.prototype.greet = function (){ alert('hi') };
function Foo(){ };


なんでエラーになるのか。
Foo.prototype.greet = ...
は代入文で、実行時に関数が定義されるけど、
その定義がされる前に
foo.greet();
を呼んでしまっているから、という事か。

メソッドの代入は、
クラス宣言をした後、かつ、インスタンスからメソッド呼び出しをする前
にやるべし。

とは、「インスタンスからメソッド呼び出しをする前に代入しなければならず、かつ、可読性のためにクラス宣言の後に代入した方がよい」という事かな?

0 件のコメント:

コメントを投稿


Related Posts Plugin for WordPress, Blogger...