2014-02-12 84 views
0

我有這樣的javascript代碼:使用父範圍變量和JavaScript

myApp.factory('Reddit', function($http) { 
    var Reddit = function() { 
    this.items = []; 
    this.busy = false; 
    this.after = ''; 
    }; 

    Reddit.prototype.nextPage = function() { 
    console.log(this.items);// [] 
    $http({method: 'GET', url: url}). 
    success(function(data, status, headers, config) { 
     console.log(this.items); // undefined ?? how to access to items list 
    }) 

如何可以訪問到的物品清單在success功能?

+0

成功回調函數'this'是指回調函數,而不是'Reddit'對象,因此'this.items'是未定義的。請參閱@ ogc-nick關於如何避免此問題的答案。 – package

回答

1

嘗試在定義它時將其分配給局部變量。該局部變量應該在你的成功函數中定義。

Reddit.prototype.nextPage = function() { 
    console.log(this.items);// [] 
    var localItems = this.items; // if it is defined here, then alias it to a local var (you can rename it to whatever) 
    $http({method: 'GET', url: url}). 
    success(function(data, status, headers, config) { 
     console.log(this.items); // undefined ?? how to access to items list 
     console.log(localItems); // should work 
    }) 

我認爲,雖然你會想要訪問整個對象在這種情況下,你可以別名this

Reddit.prototype.nextPage = function() { 
    var obj = this; 
    $http({method: 'GET', url: url}). 
    success(function(data, status, headers, config) { 
     obj.items.push('xxx'); 
    }); 

這裏是顯示一個Reddit對象建立不同的多個實例plunkr items列表:。確保檢查控制檯。