为什么我在javascript中对此模块模式进行了未定义?

时间:2013-11-18 15:37:18

标签: javascript

为什么我在x.test()上未定义?这是一个匿名函数。

var Calculator = function () {    
  // private stuff
  var x = 55;      
  return {
    // public members    
    y: x,
    test: function () {
      console.log(x);
    }
  };
}; 

var x = new Calculator(); 

console.log(x.y);
console.log(x.test());

2 个答案:

答案 0 :(得分:2)

您正在记录x.test返回值,隐含undefined

console.log(x.y); // Logs 55
var x = x.test(); // Logs 55 (because of the console.log call in x.test)
console.log(x); // Logs undefined (because that's what x.test returned)

您的意思是从x方法返回“私人”test吗?

// ...
return {
    y: x,
    test: function () {
        return x;
    }
}

答案 1 :(得分:1)

因为您正在打印(console.log)函数的返回,而该函数不会返回任何内容。

只需在x函数中返回test值:

var Calculator = function () {
    // private stuff
    var x = 55;

    return {
        // public members
        y: x,
        test: function () {
            return x;
        }
    };
};