javascript私有成员无法正常工作

时间:2015-03-09 15:40:02

标签: javascript

我正在尝试让私有属性在javascript中运行。

        var obj = function() {
            var a = 0;
            this.run = function() {
                var q = a;
                a += 1;
                return q; 
            };
        };
        alert(obj.run());
        alert(obj.run());

我有一个私有变量a和一个公共函数run,但是当我调用它时,它会抛出一个错误,说obj.run不是一个函数。有谁知道什么是错的?

由于

2 个答案:

答案 0 :(得分:5)

您应该创建obj

的实例
var o = new obj();

console.log(o.run());
console.log(o.run());

Example

或者您可以使用module pattern,就像这样

var obj = (function() {
  var a = 0;

  return {
    run: function () {
      var q = a;
      a += 1;
      return q; 
    }
  };
})();

console.log(obj.run());
console.log(obj.run());

Example

答案 1 :(得分:1)

  

这个值取决于函数的调用方式。 (上下文)

你的obj是一个函数类型。它尚未被调用,未被调用,或者尚未创建它的实例。那就是这个'这里指的是window对象,而不是函数obj类型。上下文是' window'这里

this.run = function () {
      //code
}

// here the context is window, hence attaches run property to window 
// object making run method accessible in global scope.

当你这样做时

obj.run() 
// remember 'this' to be window , this statement will not work, 
// because obj doesn't have run property.

当您创建obj的实例时

var o = new obj(); // context of 'this' is set to function now

所以,如果你调用o.run()//它会起作用。

this in javascript