在JavaScriptHOWTO中,将未实例化的对象传递给不同类的构造函数调用,后者稍后在时间轴中实例化
In JavaScript HOWTO pass uninstantiated object to constructor call of different class, which is instantiated later in the timeline?
在实例化ClassA的对象VarAarB,该变量充当ClassBarA被实例化之后;稍后在管道中的某个地方,我将新实例化的ClassB对象分配给VarB。
在ClassA中,我保存对VarB&然后用这个来做任何工作。
我面临的问题是,当我试图在VarA上使用任何依赖于VarB的方法时,我会收到错误,说VarB未定义。这让我很困惑,因为在使用这些方法之前,我会确保VarB已正确实例化。既然我保存了对VarB的引用,它应该指向corect对象,对吧?
更新-根据请求对示例进行编码。
var varA, varB;
// Code
varA = new ClassA({
varB: varB
});
// Code
varB = new ClassB({
attributeB: "SOME_VALUE",
});
// Class Definition for ClassA which uses varB
var ClassA = Class.extend({
varB: {},
init: function(settings) {
this.varB = settings.varB;
},
dummyMethod: function() {
// Do Something with varB.attributeB
}
});
不确定这是否重要,但我使用John Resig的Class Extend Util进行简单JavaScript继承。作为我所有班级的基类。
如果你有这样的东西:
var VarB = null, VarA = new ClassA(VarB);
然后,当你准备好了,你就这样做:
VarB = new ClassB();
那么"VarA"对象所持有的是您传入的"null"值,并且您已经将"VarB"的值更改为其他值。没有办法做到你所描述的,至少不完全是这样。JavaScript严格意义上是按值传递,这意味着当您进行函数调用时,您将参数表达式的值传递给函数。在"ClassA"构造函数中,"null"恰好来自调用范围中名为"VarB"的变量这一事实被完全隐藏;它只是一个"null"。
现在,可以做的是:
var VarB = { actualB: null }, VarA = new ClassA(VarB);
然后:
VarB.actualB = new ClassB();
在这种情况下,您将而不是更改"VarB"的值;您将更改"VarB"引用的对象的属性值。如果编写"ClassA"代码是为了隐藏该参数并引用其"actualB"属性,那么它就可以工作了。
相关文章:
- 如何在GoogleWeb工具包(GWT)中从JSNI调用接口(实例化)
- Mongoose TypeError:实例化模式类型的对象时,对象不是函数
- Google可视化addListener调用函数引用错误
- 在 JavaScript 中,当我们实例化派生对象时,原型的函数隐藏在哪里
- 如何理解“当类实例化时,JavaScript静态方法也是不可调用的”
- 调用Class.prototype=new MyClass()是否确保每次都重新实例化超类
- 实例化函数参数中的对象
- 调用Javascript中实例的函数
- 如何使对象可以作为实例和函数调用
- 在键盘按下时对特定指令实例进行函数调用
- 如何在javascript中调用实例化类的函数
- 实例化函数对象时创建局部变量多少次?( 高级 )
- 在javascript中实例化函数时设置自己的obj键
- 我如何在JS中动态地要求模块、实例化对象和调用函数
- 不使用"new"访问原型属性实例化函数对象
- javascript如何在类/对象发生实例化后调用新添加的方法?
- 序列化函数调用
- 在JavaScriptHOWTO中,将未实例化的对象传递给不同类的构造函数调用,后者稍后在时间轴中实例化
- 如何实例化一个具有由函数设置的属性的对象,即在正确的时间调用它们
- 动态实例化函数&在JavaScript中调用方法