それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

JSON定義したらNewできない

JSONでオブジェクト作ったらNEWできない。この理由がずっと分らなかった。というより、Newする方法があると思っていた。どうやらまともにNEWすることは不可能なようだ。よく考えてみたら当たり前なのだけれどJSONはObjectなのでついついNewしたくなる。

var Dog = {
  name:"",
  owner:"",
  bark:function(){
    alert("わんわん")
  }
}
dog.name = "たろー";//出来る
var pet = new Dog("たろー");//出来ない

じゃぁdog.prototypeがあるじゃないか、とおもってprototypeを指定しようとしてもエラーになる*1

var Animal = {
  name:"",
  owner:"",s
  str:"うがが",
  bark:function(){
    alert(this.str);
  }
}
var dog = new Object;
dog.prototype = Animal;
//dog.bark();//出来ない
alert(dog.protoype);//null


まぁ当たり前だけれど出来ません。new が出来るのはFunctionで定義した場合。だからAnimalオブジェクトをFunctionで定義してみた。

var Animal = function(name,str){
  this.name = name || "UMA";
  this.owner;
  this.str = str || "うがが";
  this.bark=function(){
    alert(this.str);
  }
}
var dog1 = new Object;
dog= new Animal("たろー","わんわん");
dog1.protoype = dog;
dog.bark();//出来る

//似てるけど、出来ない例
dog2 = {};
dog2.prototype = new Animal();
dog2.bark();//出来ない

*1:ただしテスト環境はWSH(JSctipt)