javascript - Node.js 中的计算属性名称 ES5 - 当我动态调用函数时,控制台返回 TypeError : Cannot read property of undefined

标签 javascript variables call

我试图在 Node.js 中动态调用函数以避免无限的 switch-case 列表。

这是我想要访问的文件实例:

var Object = require('../models/Object'); // it's a classic mongoose Schema's object

这是我的动态函数:

/***** post words *****/
router.post('/words', function (req, res) {
    var word = req.body ;
    var Theme = req.body.theme


    [Theme].add[Theme](word, function(err, words) {
        if(err) {
            res.json(err);
            throw err;
        }

        return res.json(words);
    })

})

我们假设 object.name 是“Object”的情况。

我想要构建的函数必须调用另一个文件中的 addPost 方法。为了动态调用这个文件,我准备了一个计算名称属性机制。因此我总是根据我的需要调用相应的文件。如果我需要对象并且用户发布了对象的类别值,那么它将在对象文件上计算朝向良好目的地的帖子。所以我的计算名称属性如下所示:

console.log(req.body.name) // > "Object" 
Name = req.body.name 
console.log(Name)  // > "Object" 

现在好了,

当我显式输入要调用函数的对象名称时,如下所示:

Object.functionObject()

该功能运行良好。

但是如果我使用动态值调用,例如:

[名称].functionOf[名称]()

函数返回我:

TypeError: Cannot read property of undefined

另外,

我尝试了 ${Name} 但我的控制台返回了我:

TypeError: console.log(...) is not a function

我已经尝试在 Node.js 端安装 ES6,目前结果相同。

console.log 给我返回了巨大的值,这怎么可能?

最佳答案

[Theme].add[Theme]()

此代码创建一个以 Theme 作为第一个值的数组,然后调用 functionOf,该数组类型中不存在该函数。 addTheme 实际上是一个语法错误,但引擎永远不会到达它。

虽然我建议使用开关,但我认为你想做的是这样的

// define Object1, Object2 with functionObject()
var objectCollection = {};
objectCollection[Object1.name] = Object1;
objectCollection[Object2.name] = Object2;


// Then you get req.body.name later
var objectName = req.body.name;
// and call the method
objectCollection[objectName].functionObject()

这在技术上是可行的,但是有很多失败的可能性,并且以这种方式依赖反射让我感到紧张,因为你的客户需要知道内部工作原理(例如对象和函数名称)。这很糟糕。

如果这些对象的行为如此不同,您可能应该将它们分成单独的路由,并让您的客户端在您制作 API 时决定需要哪个。

您还可以创建一个工厂来返回正确的对象并将 switch 语句隐藏在那里。

关于javascript - Node.js 中的计算属性名称 ES5 - 当我动态调用函数时,控制台返回 TypeError : Cannot read property of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51108193/

相关文章:

php - 在 PHP echo 语句中使用 JS 'onclick' 函数并嵌入 XML 获取的正确语法

java - 如何控制Java中变量的可见性?

jquery-ui - 使用 jquery 函数存储数组中的 4 个变量并可由另一个页面访问的最佳方法是什么

IOS 在流式传输视频时检测调用中断

mysql - 尝试给MYSQL添加主键

javascript - dc.js:具有嵌套分组的箱线图

javascript - 为什么我的函数在严格模式(函数形式)下未定义?

bash - bash 脚本中 `exec` 之后不会运行任何代码

Javascript .call 函数返回额外的 'undefined' 值

javascript文件中的php常量