如何从内部原型访问类变量-javascript

如何从内部原型访问类变量-javascript,javascript,prototype,Javascript,Prototype,我可能不清楚这个问题的标题。对不起 这是我想做的 我试图在javascript中使用原型模式。我创建了一个类,如下所示 var MyClass = null; (function() { MyClass = function() { this.clsVar = "I'm inside constructor"; }; MyClass.prototype = { constructor: MyClass, myFunc1:

我可能不清楚这个问题的标题。对不起

这是我想做的

我试图在javascript中使用原型模式。我创建了一个类,如下所示

var MyClass = null;
(function() {
    MyClass = function() {
        this.clsVar = "I'm inside constructor";
    };

    MyClass.prototype = {
        constructor: MyClass,
        myFunc1: function() {
            console.log("I'm func1 accessing constructor variable : " + this.clsVar);
        },
        nested: {
            myFunc2: function() {
                console.log("I'm func2 accessing constructor variable : " + this.clsVar); // I know, this will never point to the class scope
            }
        }
    }
}())
我正在创建一个对象

var my = new MyClass();

my.myFunc1(); // which prints "I'm func1 accessing constructor variable : I'm inside constructor" 

my.nested.myFunc1(); // as expected, it prints "I'm func2 accessing constructor variable : undefined
我所要做的就是,我应该能够从
nested.myFunc2

有可能吗。?非常感谢并需要任何帮助。
谢谢。

事实上,这是有道理的

您的
myFunc2
中的
this
不再指
MyClass
,而是指另一个上下文。因此,最快的方法是使用
call
apply
如下:

var myNewObject = new MyClass();
myNewObject.nested.myFunc2.call(myNewObject, arg1, arg2);


JavaScript基于原型的类系统不允许这样做。 MyClass的原型将在该类的所有实例之间共享。在下面的代码中,两个实例将使用相同的函数实例

var first = new MyClass(), second = new MyClass();
first.nested.myFunc2(); <-- Same prototype function
seecond.nested.myFunc2(); <-- Same prototype function
var first = new MyClass(), second = new MyClass();
first.nested.myFunc2(); <-- Same prototype function
seecond.nested.myFunc2(); <-- Same prototype function
var MyClass = null;

(function() {
    MyClass = function() {
        this.clsVar = "I'm inside constructor";
        var that = this;
        this.nested = {
            myFunc2: function() {
                console.log("I'm func2 accessing constructor variable : " + that.clsVar); // I know, this will never point to the class scope
            }
         }
    };

    MyClass.prototype = {
        constructor: MyClass,
        myFunc1: function() {
            console.log("I'm func1 accessing constructor variable : " + this.clsVar);
        }
    }
}())