在字符串中使用对象函数的返回值

时间:2013-12-17 18:20:58

标签: javascript

我试图在JavaScript对象中做一些逻辑来确定值应该是什么,并且遇到了一些困难。

我有一个'config'对象:

var gRestfulServicesHost = new function() {
   return {
     hostUrlPrefix: 'http://',
     hostUrl: 'somehost.example.com',
     hostVitalSourceGPOUrl: 'local.somehost.com/restful',
     relativePathUI: '/application',
     relativePathRestfulSvc: function() {
      if(oGetVars.env) {
        switch (oGetVars.env) {
           case 'dev':
              console.warn('Using dev restful service');
              break;
           case 'qa':
              console.warn('Using qa restful service');
              break;
          case 'release':
             console.warn('Using release restful service');
             break;
          case 'staging':
             console.warn('Using staging restful service');
             break;
          case 'demo':
             console.warn('Using demo restufl service');
             break;
          default:
             console.warn('Using local restful service');
             break;
          }
       }
       return '/some-provider/api';
    }
  }
};

但是当我去检索值时,这样的东西就可以了:

gRestfulServicesHost.hostUrlPrefix // inspector shows 'http://'

但是当我想使用relativePathRestfulSvc时,就像这样:

gRestfulServicesHost.relativePathRestfulSvc // inspector shows: function () { ... }

我想要函数的返回值,但它就像函数甚至没有被评估。我甚至用pare gRestfulServicesHost.relativePathRestfulSvc()尝试了它,但它仍然不起作用。

由于

2 个答案:

答案 0 :(得分:2)

那是因为你实际上并没有调用该函数,而是将一个函数赋给relativePathRestfulSvc属性。要实际运行代码,您必须执行以下操作:

relativePathRestfulSvc: (function() {
  if(oGetVars.env) {
    switch (oGetVars.env) {
       case 'dev':
          console.warn('Using dev restful service');
          break;
       case 'qa':
          console.warn('Using qa restful service');
          break;
      case 'release':
         console.warn('Using release restful service');
         break;
      case 'staging':
         console.warn('Using staging restful service');
         break;
      case 'demo':
         console.warn('Using demo restufl service');
         break;
      default:
         console.warn('Using local restful service');
         break;
      }
   }
   return '/some-provider/api';
})()

请注意,整个函数已包含在括号()中,然后立即调用(以下()),它将函数的返回值赋给relativePathRestfulSvc属性。

此模式称为“立即调用函数表达式”(IIFE,发音为“iffy”),通常采用(function() { ... })()的形式,声明函数并立即调用/调用。

您可以在此处阅读相关内容:http://en.wikipedia.org/wiki/Immediately-invoked_function_expression

答案 1 :(得分:1)

你实际上并没有在任何地方调用这个功能。你想要的东西是:

relativePathRestfulSvc: (function() {
      if(oGetVars.env) {
        switch (oGetVars.env) {
           case 'dev':
              console.warn('Using dev restful service');
              break;
           case 'qa':
              console.warn('Using qa restful service');
              break;
          case 'release':
             console.warn('Using release restful service');
             break;
          case 'staging':
             console.warn('Using staging restful service');
             break;
          case 'demo':
             console.warn('Using demo restufl service');
             break;
          default:
             console.warn('Using local restful service');
             break;
          }
       }
       return '/some-provider/api';
    })() // <--- Use () to call the function
相关问题