これはいくつかのコードです
ob1 = {
m: function(){
alert(this);
}
}
ob2.m = ob1.m;
これは、この場合、関数がメモリに一度格納されると思うためです
これはいくつかのコードです
ob1 = {
m: function(){
alert(this);
}
}
ob2.m = ob1.m;
これは、この場合、関数がメモリに一度格納されると思うためです
はい、そのコードでは、 と の両方が同じfunctionへの参照を持っていob1
ます。を呼び出すと、 を参照して呼び出されます。を呼び出すと、 を参照して呼び出されます。関数のコピーは1 つだけで、その関数への複数の参照があります。JavaScript では、関数は他のオブジェクトと同様に実際のオブジェクトです。(これは、他の多くのプログラミング言語には当てはまりません。)ob2
m
ob1.m()
m
this
ob1
obj2.m()
m
this
ob2
これを行うこともできます:
function m() {
}
var ob1 = {m: m};
var ob2 = {m: m};
繰り返しますが、それらは機能を共有しています。
またはこれ:
function MyObject() {
}
MyObject.prototype.m = function() {
};
var ob1 = new MyObject();
var ob2 = new MyObject();
MyObject.prototype
を介して作成されたときに両方とも基本的なプロトタイプとして受け取り、プロトタイプには関数への参照があるため、再び関数を共有しnew MyObject
ます。
同様に (ES5 対応環境で):
var MyProto = {
m: function() {
}
};
var ob1 = Object.create(MyProto);
var ob2 = Object.create(MyProto);
オブジェクトは再びプロトタイプを共有することになり、そのプロトタイプにはm
機能があります。
はい。関数はファーストクラスのオブジェクトです。それらへの参照と実際にやり取りするだけです。