私はこのようなことを試みています:
(function() {
var Foo, foo;
Foo = function(proto) {
var obj, privateMethod, publicMethod;
privateMethod = function() {
return console.log("private", this);
};
publicMethod = function() {
console.log("public", this);
return privateMethod();
};
obj = Object.create(proto);
obj.bar = publicMethod;
return obj;
};
foo = new Foo({
baz: "dooz"
});
foo.bar();
}).call(this);
明らかに、これはpublicMethodが呼び出されたときのオブジェクト自体ですが、privateMethodのグローバルオブジェクトに設定されます。私はそれが変更することによって解決できることを知っています:
return privateMethod();
に:
return privateMethod.call(this);
関数が関数にネストされていると、これが失われることは知っていますが、ここではそのようなケースを予期していませんでした。ここでこのJavaScriptのバグに遭遇しますか、それとも私がまだ理解していない何かがありますか?