使用JavaScript私有方法:

使用JavaScript私有方法:,javascript,node.js,private,privacy,Javascript,Node.js,Private,Privacy,以下是Douglas Crockford关于JavaScript变量和函数可见性的教程: 我已经编写了以下MyClass.js文件,并且正在使用节点从终端运行它。下面我展示了终端上的输出和我的类。我不明白为什么返回“undefined”(而不仅仅是true),以及为什么我的console.log(log)没有显示在任何地方 $ node MyClass.js undefined true 我的班级呢 function MyClass(log) { this.log = log;

以下是Douglas Crockford关于JavaScript变量和函数可见性的教程:

我已经编写了以下MyClass.js文件,并且正在使用节点从终端运行它。下面我展示了终端上的输出和我的类。我不明白为什么返回“undefined”(而不仅仅是true),以及为什么我的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());

调用
\u evaluate
时不带任何参数,因此它只打印一次
未定义的
(第7行),然后打印
true
(第19行)


最后,它打印
未定义的
,因为脚本作为一个整体没有返回值。

您得到
未定义的
,因为您没有将参数传递给
\u evaluate
,因此
log
在函数中是
未定义的
。不确定预期结果是什么。。。只需删除参数?为什么要为
\u evaluate
函数设置参数?因为它与构造函数的参数同名(
log
),所以它被隐藏了…而且因为您调用了
\u evaluate()
(无参数),所以它有一个
未定义的值。尝试执行
console.log(that.log)(不带
\u evaluate
功能的
日志
参数)