2016년 12월 18일 일요일

javascript 練習2

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(' ^^'));

댓글 없음:

댓글 쓰기