javascript函数作为不返回私有变量的类

时间:2015-12-09 11:58:07

标签: javascript oop object javascript-objects javascript-namespaces

我使用javascript对象作为命名空间并将函数定义为属性。在函数中有两个属性,引用this参数。属性的一个是函数,另一个是变量。现在,当我调用此函数(定义为对此的引用)时,我想返回第二个引用属性的值(这是一个变量)。但是在这个函数的范围内,我无法获得变量的值。我在这里缺少什么?

定义

var myNameSpace = myNameSpace || {};
myNameSpace.myClass = function(){
    this.myVar = someValue;
    var someConstantVar = 17.012;
    this.myFunction = function(){
        ...
        var returnValue = someConstantVar + ((this.myVar+22)*1.09);
        return returnValue; 
    };
}

用法

var testObject = new myNameSpace.myClass();
testObject.myVar = someNewValue; 
var output = testObject.myFunction();

现在存在未定义this.myVar的错误(很可能)。那么如何在函数中获得this.myVar的值。

2 个答案:

答案 0 :(得分:2)

这应该适合你:

var myNameSpace = myNameSpace || {};
myNameSpace.myClass = function() {
    this.myVar = 3;
    this.myFunction = function() {

        return this.myVar;
    };
}

var testObject = new myNameSpace.myClass();
var output = testObject.myFunction(); // 3

myVar是您通过new myNameSpace.myClass()创建的每个对象的字段。要从对象内部访问字段,您必须使用this

此外,在此实现中,myVar实际上是公开的,因此您可以像这样直接访问它:

output.myVar // 3

要使myVar成为私有变量,您可以改为:

var myNameSpace = myNameSpace || {};
myNameSpace.myClass = function() {
    var myVar = 3;

    this.myFunction = function() {
        return myVar;
    };
}

答案 1 :(得分:1)

你可以这样做。

var myNameSpace = myNameSpace || {};
myNameSpace.myClass = function(){
   var that = this;
    this.myVar = 'someValue';

    this.myFunction = function(){
        return that.myVar; //Here I need to return this.myVar
    };
}

“this.myFunction”里面的“this”只有“this.myFunction”的范围。你需要“myClass”的范围