gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:52:00 26 4
gpt4 key购买 nike

我试图在 JavaScript 对象内部执行一些逻辑以确定值应该是什么,但遇到了一些困难。

我有一个“配置”对象:

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 () { ... }

我想要函数的返回值,但好像函数甚至都没有被求值。我什至用括号 gRestfulServicesHost.relativePathRestfulSvc() 尝试过,但它仍然不起作用。

谢谢

最佳答案

那是因为您实际上并没有调用函数,而是将函数分配给 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

关于javascript - 在字符串中使用对象函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20641795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com