2013-11-15 31 views
-2

我怎麼能訪問一個祖父母「這個」?如何在JS中訪問這個祖父母?

function F(){} 
F.prototype.foo = 5; 
F.prototype.getFoo = function(){ return this.foo; }; 
F.prototype.container.getFoo = function(){ 
    /* What goes here to return 5? */ 
}; 
+2

那麼容器從哪裏來? – Musa

+0

如果它不在對象/實例的直接範圍內,則不能訪問它。你必須像調用'var x = new Foo();'然後'x.container.getFoo.call(x)'那樣調用'container.getFoo'來顯式設置getFoo的作用域 – megawac

+0

在這個例子中,任何'this.foo ''是'5',除非你將一個實例的'foo'設置爲別的東西。 – Mathletics

回答

0
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中的命名空間和原型繼承的一些信息。

相關問題