2014-06-13 20 views
0

我JavaScript的變量和函數在這裏的知名度以下道格拉斯Crockford的教程:http://javascript.crockford.com/private.html用JavaScript私有方法的工作:

我寫了下面的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()); 
+2

由於您沒有將參數傳遞給_evaluate,因此''undefined'因此'log'在函數內部是'undefined'。不知道預期的結果是什麼......只是刪除參數? –

+1

爲什麼你有'_evaluate'函數的參數?由於它與構造函數的參數('log')具有相同的名稱,因此它被隱藏了......並且由於您調用了'_evaluate()'(無參數),所以它有一個'undefined'值。嘗試做'console.log(that.log);'(沒有'_evaluate'函數的'log'參數) – Ian

+0

這是真的! – FranXh

回答

2

你叫_evaluate不帶任何參數,所以它打印undefined一次(7號線),然後true(19行)。

最後,它會打印undefined,因爲您的腳本作爲整體沒有返回值。