function F = function(){}
F.prototype.foo = 5;
F.prototype.getFoo = function(){ return this.foo; };
F.prototype.container = {
getFoo: function(){
/* What goes here to return 5? */
}
};
var f = new F;
f.getFoo(); // 5, as it should be.
f.container.getFoo(); // how do i make this 5?
在上面的代碼,f.container
沒有可訪問的關係f
的原型 - 它不是從它構造,它僅僅是一個名稱空間掛在F.prototype
你的唯一的事所能做的就是傳遞一個新的範圍,或者改變它的執行在這樣的範圍:
F.prototype.container = {
getFoo: function(newscope){
return newscope.foo;
}
};
//instantiate f as an instance of F...
f.container.getFoo(f);
OR
F.prototype.container = {
getFoo: function(){
return this.foo;
}
};
//instantiate f as an instance of F...
f.container.getFoo.apply(f);
我主張你既不使用這些解決方案,而是使用Google搜索JavaScript中的命名空間和原型繼承的一些信息。
那麼容器從哪裏來? – Musa
如果它不在對象/實例的直接範圍內,則不能訪問它。你必須像調用'var x = new Foo();'然後'x.container.getFoo.call(x)'那樣調用'container.getFoo'來顯式設置getFoo的作用域 – megawac
在這個例子中,任何'this.foo ''是'5',除非你將一個實例的'foo'設置爲別的東西。 – Mathletics