javascriptのprototypeオブジェクトの利点
javascriptのprototypeオブジェクトについてです。
今まで適当にやっていたのですが、少しまとめたいと思います。
- メモリの使用量を削減できる
- メンバーの追加や変更をインスタンスがリアルタイムに認識できる
メモリの使用量を削減できる
こちらはどういうことかを説明します。
javascriptでコンストラクターによるメソッドの追加は、メソッドの数に比例して、無駄なメモリを消費する
という問題があります。
var Member = function(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; this.getName = function() { return this.firstName + '' + this.lastName; } } mem = new Member("foo", "bar"); mem_2 = new Member("foo", "baz");
これが永遠と作成されてしまうと、その度にメモリが消費していきます。
そこでprototypeを使用します。
prototypeはインスタンス化した場合は、元となるオブジェクトに属するprototypeオブジェクトに対して暗黙的に参照を持つようになります。
var Member = function(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } Member.prototype.getName = function() { return this.firstName + '' + this.lastName; } mem = new Member("foo", "bar"); mem_2 = new Member("foo", "baz"); mem.getName() =>"foobar"
参照でメソッドを実行しているので、無駄なメモリ確保がなくなります。
メンバーの追加や変更をインスタンスがリアルタイムに認識できる
var Member = function(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } mem = new Member("foo", "bar"); mem_2 = new Member("foo", "baz"); Member.prototype.getName = function() { return this.firstName + '' + this.lastName; } mem.getName() =>"foobar"
このように後から追加することができます。
以上です。