1.関数
2.関数リテラル
3.コンストラクタ関数
4.Function()コンストラクタ
5. メソッド
1. 一度の定義だけでプログラムから何度も実行や呼び出しが行えるjavascriptコード部分
function talk(name){ return 'I am ' + name;}
talk('mimi');
2. 関数リテラルは著名関数を定義する式
関数との大きい違いは、関数名がないところ
var person = function(name){ return ' I am ' +name;};
person('mimi');
3.インスタンス化したオブジェクトを参照したい時定義(オライリー154page)
・初期化処理が行える。
・プロパティ、メソッド定義して、インスタンス化したオブジェクトから参照できる。
・プロパティは、インスタンス毎に異なる値の場合、定義
・メソッドは、インスタンスで共有できる場合 --> プロトタイプオブジェクトに追加
※たくさんのオブジェクトがプロパティを継承し共有できるので、使用するメモリを大幅に節約できる。
function Person(name, age){
this.name = name; // this --> 呼び出しオブジェクト
this.age = age;
this.play = function(){return 'play!!!'};
};
Person.prototype.talk = function(){
return 'hellow' + 'I am ' + this.name + '. ' + this.age + 'years old. '
};
var person1 = new Person('mimi', 18);
document.write(person1.talk());
Person.prototype.sleep = function(){return 'goodNight~'};
document.write(person1.sleep() + '');
document.write(person1.hasOwnProperty('name') + ''); // true
document.write(person1.hasOwnProperty('sleep') + ''); // false(継承されたプロパティのため)
document.write(person1.hasOwnProperty('play') + ''); // true
4.Function()コンストラクタを使い関数を定義
var person = new Function('x', 'y', 'return x * y');
document.write(person(2, 9));
・呼び出す度に関数の本体が解釈され(コンパイルされる)、新しい関数オブジェクトが生成されるため、頻繁に使われる場合、効率が悪い
・関数リテラルや関数を使う場合、ループの中で使われたり、たくさん使っても使う度にコンパイルされるわけではない
・Function()コンストラクタが生成する関数は、静的スコープを使わない、
常にトップレベルの関数としてコンパイルされる。
var y= 'Guest';
function person(){
var y= 'mimi';
return new Function('return y');
}
document.write(person());
5.オブジェクトのプロパティとして、処理を定義
var person = {name: 'guest', talk: function (talk) { return 'hello! My name is ' + this.name + talk; }}; person.name='mimi';
document.write(person.talk(' ^^'));
댓글 없음:
댓글 쓰기