我可能不清楚问题的标题。对不起。
这是我想要做的。
我试图在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
我要做的就是,我应该可以从clsVar
nested.myFunc2
是可能的。?非常感谢和需要任何帮助。 感谢。
答案 0 :(得分:1)
实际上,有一点。
this
中的myFunc2
不再引用MyClass
,而是引用另一个上下文。因此,最快的方法是使用call
或apply
,如:
var myNewObject = new MyClass();
myNewObject.nested.myFunc2.call(myNewObject, arg1, arg2);
或
myNewObject.nested.myFunc2.apply(myNewObject, [arg1, arg2]);
答案 1 :(得分:0)
JavaScript基于原型的类系统不允许这样做。 MyClass的原型将在该类的所有实例之间共享。在以下代码中,两个实例将使用相同的函数实例...
var first = new MyClass(), second = new MyClass();
first.nested.myFunc2(); <-- Same prototype function
seecond.nested.myFunc2(); <-- Same prototype function
当代码进入&#34; myFunc2&#34;定义,父母应该访问哪个?
如果您需要访问父母&#34;这个&#34;值,您必须使用闭包并在父构造函数中设置嵌套对象,如下所示。
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);
}
}
}())