在
Javascript中,我想定义一个带有内部(或嵌套)类的类.在内部类中,我希望能够访问父实例.我怎样才能有效地做到这一点?
有些代码会显示我的意思.假设我定义了一个类MyType1,它暴露了几个属性和一个函数,SayHello:
(function(){ MyType1 = function(name){ this.TypeName = "MyType1"; this.Name = name; }; MyType1.prototype.SayHello = function() { say(this.Name + " says hello..."); }; })();
好的,现在,从那里开始,我想在MyType1中添加一个“内部类”,所以我添加了一些新的代码,使它看起来像这样:
(function(){ MyType1 = function(name){ this.TypeName = "MyType1"; this.Name = name; var parentName = name; this.Child = function(name) { this.Description = parentName + "'s child," + name; }; this.Child.prototype.Introduce = function() { say(this.Description + ",greets you..."); }; }; MyType1.prototype.SayHello = function() { say(this.Name + " says hello..."); }; })();
现在我可以像这样使用这些类:
var x = new MyType1("Victor"); x.SayHello(); var c = new x.Child("Elizabeth"); c.Introduce();
一切正常.但它为MyType1的每个实例定义了一个新的Child函数(或类型,如果你喜欢).我想要做的是访问父类范围,而不是诉诸于低效率.
像这样的东西:
(function(){ MyType2 = function(name){ this.TypeName = "MyType2"; this.Name = name; this.Prop1 = 1872; var parentName = name; }; MyType2.prototype.SayHello = function() { say(this.Name + " says hello..."); }; var c1 = function(name) { this.Description = parentName + "'s child," + name; // ^^ no go! ^^ }; c1.prototype.Introduce = function() { say(this.Description + ",greets you..."); }; MyType2.prototype.Child = c1; })();
但是,这不起作用.当然,parentName var超出了范围.
Child实例(在构造函数中,或在任何类函数中)是否有一种有效的方式来访问父(MyType2)实例?
我知道我可以将Child类定义为一个独立的非嵌套类,然后在ctor中,只需传递Parent实例.但是这会创建对父实例的N个引用,每个子实例都有一个引用.这似乎是我想避免的低效率.
谢谢你的任何提示.
编辑 – 我希望Child访问父实例的原因是父拥有一个创建起来相当昂贵的对象 – 类似于数据库连接 – 我希望孩子能够利用那个东西.