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