javascript (2)

色々見てるんですがなかなか凄い。朝イチで昨晩来気になっていた_Interesting tips in JavaScript_の_#2 Instantiation without "new"_について確認。

実は

javascript では new という演算子は右オペランドは関数でなければならいとの事。この関数はオブジェクト指向的に言うとコンストラクタと呼ばれてるソレですな。
以下が #2 で例示されている当たり前のパターン。

//Book class
function Book(isbn, author, title)
{
	this.isbn = isbn;
	this.author = author;
	this.title = title;
};

Book.prototype = {
	getIsbn: function(){
		return this.isbn;
	},
	getAuthor: function(){
		return this.author;
	},
	getTitle: function(){
		return this.title;
	},
};   

//instantiating using new
var book1 = new Book("1590597273", "John Resig", "Pro JavaScript Techniques"); 

実は_C/C++ プログラマのための JavaScript 入門: new 演算子とインスタンス_というドキュメントによれば、以下な命令を実行した場合、

var book1 = Book("1590597273", "John Resig", "Pro JavaScript Techniques"); 

Book な手続きの中の this は_Global インスタンス (への参照) が格納されています_との事です。なので以下な条件分岐が付いてるんですな。

function Book(isbn, author, title)
{
	if(window == this)
		return new Book(isbn, author, title);
	this.isbn = isbn;
	this.author = author;
	this.title = title;
};

こうすりゃ new 演算子を使わずにオブジェクト作れるよね、って書いてありますが実質使ってたりする模様。