【问题标题】:Working with JavaScript private methods:使用 JavaScript 私有方法:
【发布时间】:2014-06-13 15:36:01
【问题描述】:

我正在关注 Douglas Crockford 关于 JavaScript 变量和函数可见性的教程:http://javascript.crockford.com/private.html

我已经编写了以下 MyClass.js 文件,我正在使用节点从终端运行它。下面我在终端和我的班级上显示我的输出。我不明白为什么我会返回一个“未定义”(而不仅仅是真的),为什么我的 console.log(log) 没有显示在任何地方?

$ node MyClass.js 
undefined
true

还有我的班级

function MyClass(log) 
{
    this.log = log;
        var that = this; 
        function _evaluate (log)
        {
             console.log(log);
             return true;
        };

    this.evaluate = function() 
    {
    return _evaluate() ? true : false;
    };

}

 var myObject = new MyClass('this is a test');
 console.log(myObject.evaluate());

【问题讨论】:

  • 你得到undefined,因为你没有将参数传递给_evaluate,因此log在函数内部是undefined。不确定预期的结果是什么...只需删除参数?
  • 为什么_evaluate函数有参数?由于它与构造函数的参数 (log) 具有相同的名称,因此它被隐藏了......并且由于您调用 _evaluate()(无参数),它具有 undefined 值。尝试做console.log(that.log);(没有log 函数的log 参数)

标签: javascript node.js private privacy


【解决方案1】:

您调用 _evaluate 时不带任何参数,因此它会打印一次 undefined(第 7 行),然后是 true(第 19 行)。

最后它打印出undefined,因为你的脚本作为一个整体没有返回值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2015-03-19
    • 2015-10-15
    • 2014-12-12
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    相关资源
    最近更新 更多