2012-06-27 92 views
2

美好的一天,訪問嵌套函數內的javascript對象屬性

我已經創建了一個對象來管理數據訪問。我的應用程序將使用幾個不同的數據存儲,所以我創建了一個簡單的工廠,供應商之間進行切換:

var dataProvider = { 
company: { 
    getAllCompanies: function (callback) { 
     var impl = factory.createProvider(implInstance.current) 
     impl.company.getAllCompanies(callback); 
    } 
} 
projects: { 
    getAllProjects: function (callback) { 
     var impl = factory.createProvider(implInstance.current) 
     impl.projects.getAllProjects(callback); 
    } 
} 
} 

也就是說一切都很好,但我寧願在數據提供程序級別我IMPL變量。我不確定我會如何正確訪問它,因爲當我嵌入這麼深的時候,'這'並不能給我提供合適的範圍。我想要類似以下內容:

var dataProvider = { 
impl: function() { return factory.createProvider(implInstance.current) }, 
company: { 
    getAllCompanies: function (callback) { 
     //THIS WON'T WORK 
     this.impl.company.getAllCompanies(callback); 
    } 
} 

謝謝!

+0

嘗試'this.impl()company.getAllCompanies(回調);'爲'impl'似乎是一個'function' 。或者甚至; 'impl:function(){return factory.createProvider(implInstance.current)}()'啓用'this.impl.company.getAllCompanies(callback);', – Stefan

回答

5

你想使用這個模塊的設計模式:

var dataProvider = (function() { 
    var getImpl = function() { 
     return factory.createProvider(implInstance.current); 
    }; 
    return { 
     company: { 
      getAllCompanies: function (callback) { 
       getImpl().company.getAllCompanies(callback); 
      } 
     }, 
     projects: { 
      getAllProjects: function (callback) { 
       getImpl().projects.getAllProjects(callback); 
      } 
     } 
    } 
})(); 
+0

+1代碼:) – Stefan

+0

Thanks @Stefan,much讚賞:) – jabclab

+0

美麗,非常感謝 –