2012-06-27 96 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

美丽,非常感谢 –