ホーム > ブログ > javascript Object.createについて

Webデザイナー ブログ

javascript Object.createについて

2016年8月17日(javascript)

いろいろjsの本やサイトを見てるとやたらnewの使用について
言及されていることに気付く。
newはオブジェクトをインスタンス化する際に使われるものですが、
newとは本来、クラスをインスタンス化するものであって、
実際、javascriptではクラスという概念は他の言語とちと
ちがうらしくクラスライクな考えをなぞらえているだけらしい。
詳しくはわからないけどともかくnewを使うにはそれなりに
気を使うべきであり、ベストは使わないべきともすら言われている。
そこで新たに定義された仕様でObject.createというものがある。

var o = Object.create(Object.prototype, {
  name : {value: "aaa"},
  bar: { value : function() { return this.name }}
});

こんな感じでオブジェクトを作成できる。
valueってのは決まり文句の模様。
あとは普通のオブジェクトと一緒でo.name,o.bar()で
取得可能。

んで問題は継承やメソッドの追加。
newがつかえたときは
o.prototype.name2 = “bbb”;
とかで行けたんだけどどうやらこれはできないみたい。
(詳しくはよくわからん・・・)
いろいろやってみて下記でできた。

var o = Object.create(Object.prototype, {
  name : {value: "aaa"},
  bar: { value : function() { return this.name }}
});
var p = Object.create(o, {
  name2 : {value: "bbb"},
  bar2: { value : function() { return this.name2 }}
});
console.log(p.name2+":"+p.name);

Object.createの第一引数にはプロトタイプの元となるオブジェクトを
指定できるとマニュアルに書いてあったので、oを入れてみた。
第二引数には新たに設定したい初期プロパティを入れれるので、
新しいのを入れてみた。それをpに入れてみたらちゃんと、
どちらのメソッド、プロパティも保持したオブジェクトができた。

ただ本当にこれでよいのか・・・
誰か教えてください。。

//追記

一度作成したオブジェクトに対して、
新たにプロパティを付け加える方法。
newを使っていたころは、
obj.prototype.hoge = “つけたいプロパティ”;
でできたんですが、create();で作成したものは
上記方法ではできないので
Object.definePropertiesなるものを使うようです。
すでに作成したobjectに対して

Object.defineProperties(o, {
  hoge: {
    value : "aaaaa",
  },
  test: {
    value : function() {
      return this.hoge
    }
  }
});

これで、oには値が二つのメソッドが二つ、
計4つのプロパティが設定されたことになります。

当然、pオブジェクトにも継承されているので、
p.test()などで呼び出すことも可能。

便利ね。

人気ブログランキングへ
応援お願いします!

コメントをどうぞ