prototypeについて
prototypeで定義すると元の関数を共有するみたい。
(元の関数を書き換えると、 new で作成されたオブジェクトの関数も書き換わる)
function obj(){ this.m = function(i){return i}; } function proto_obj(){ proto_obj.prototype.m = function(i) i; } p1 = new obj(); p2 = new obj(); np1 = new proto_obj(); //prototypeを使ってる np2 = new proto_obj(); //method m を変更 function mm(i){return i * i}; function mmm(i){return i * i * i} function display(t, str){ print("==", str, "=="); let(str = "e.m(10)"){ Array.forEach(t, function(e){ print(str, " : ", eval(str))}); } } var a = [p1,p2,np1,np2]; display(a, "最初") p1.m = mm; np1.m = mm; display(a, "p1, np1オブジェクトがもっているメソッドを書き換えた") obj.prototype.m = mmm; proto_obj.prototype.m = mmm; display(a, "元の関数のprototypeを書き換えた。") // == 最初 == // e.m(10) : 10 //p1 // e.m(10) : 10 //p2 // e.m(10) : 10 //np1 // e.m(10) : 10 //np2 // == p1, np1オブジェクトがもっているメソッドを書き換えた == // e.m(10) : 100 // e.m(10) : 10 // e.m(10) : 100 // e.m(10) : 10 // == 元の関数のprototypeを書き換えた。 == // e.m(10) : 100 // e.m(10) : 10 // e.m(10) : 100 //一つ前でmmに変更したことで結びつきが消えた。 // e.m(10) : 1000