コンストラクタをapplyする

新しいオブジェクトを定義するには、やり方や好みで色々ある。

■まず単純にコンストラクタ定義する方法

var Cat=funtion(name){ 
  this.name=name;
};
Cat.prototype.bark=funtion(){
   alert('にゃー');
};
var mycat=new Cat('ミケ');
console.log(mycat.name, mycat.bark());

■コンストラクタに無名関数をapplyする方法

var Cat=function(){};

(function(){
  this.name='ミケ';
  this.bark=function(){
    alert('にゃー');
  };
}).apply(Cat.prototype);

var mycat=new Cat();
console.log(mycat.name, mycat.bark())

■Class作成メソッドを定義する
prototype.js(今更やね)の冒頭での面白いコード。
一瞬意味が分かりにくいが、
このcreateメソッドを呼び出すと、コンストラクタ関数が返されるようになっていて、
さらには自由な初期化のためのinitializeというメソッドをapplyしている。

※"Class"なんていうオブジェクト名は便宜的なもので、javascriptにはClassの機能はない。

//これがprototype.jsに組み込まれている
var Class={
  create:function(){
    return function(){this.initialize.apply(this,arguments)}
  }
};

//使い方
var Cat=Class.create();

Cat.prototype={
  initialize:function(name){
    this.name=name;
  },
  bark:function(){
   alert('にゃー');
  }
};

var mycat=new Cat('ミケ');
console.log(mycat.name, mycat.bark()); 


Now reading

レイアウトの法則―アートとアフォーダンス

レイアウトの法則―アートとアフォーダンス