私はいつもそれsome_function(...)
がとまったく同じだと思っていましsome_function.call(this, ...)
た。これは、コンストラクター/オブジェクト構築コンテキストでの呼び出しには当てはまらないようです。
function Class(members, parent) {
function Ctor(value) {
members.__init__.call(this, value);
return this;
};
Ctor.prototype = members;
Ctor.prototype.__proto__ = parent.prototype;
return Ctor;
}
var Base = Class({
__init__: function(value) {
this.value = value;
}
}, {});
var Child = Class({
__init__: function(value) {
// Base(value*2); ← WON'T WORK AS EXPECTED
Base.call(this, value*2); // works just fine
}
}, Base);
そのChild.__init__
中で、への明示的な呼び出しを使用する必要がありますBase.call(this, value)
。この長い表現を使用しない場合は、呼び出されたベースコンストラクターでthis
グローバルオブジェクト(window
ブラウザー内)に名前を付けます。"use strict"
strictモードにはグローバルオブジェクトがないため、エラーが発生します。
Func.call(this, ...)
この例で使用する必要がある理由を誰かに説明してもらえますか?
(Node.jsv0.6.12およびOpera12.50でテスト済み。)