【问题标题】:javascript function as a class not returning private variablejavascript函数作为一个不返回私有变量的类
【发布时间】:2016-03-14 16:40:10
【问题描述】:

我使用 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的值呢。

【问题讨论】:

  • 现在问题已经更新——您在这里的预期结果是什么,实际发生了什么?你的问题还不清楚。
  • 我真的无法理解问题的作者想要得到什么。 @Dmytro 答案是正确的。
  • 说明提琴手

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


【解决方案1】:

这应该适合你:

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;
    };
}

【讨论】:

  • 实际上问题不在于返回变量值,我想在函数内部操作该变量的值,例如this.myFunction = function() { return this.myVar+22; };
  • @AnkitAgarwal 然后在问题中明确您想要什么。
  • 我已经更新了我的问题,以便您更好地理解。看看吧。
  • 好的,我知道了。
【解决方案2】:

你可以这样做。

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”的范围

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多