我正在尝试让私有属性在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不是一个函数。有谁知道什么是错的?
由于
答案 0 :(得分:5)
您应该创建obj
var o = new obj();
console.log(o.run());
console.log(o.run());
或者您可以使用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());
答案 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()//它会起作用。