Che*_*eso 7 javascript oop closures
在Javascript中,我想定义一个带有内部(或嵌套)类的类.在内部类中,我希望能够访问父实例.我怎样才能有效地做到这一点?
有些代码会显示我的意思.假设我定义了一个类MyType1,它暴露了几个属性和一个函数,SayHello:
(function(){
MyType1 = function(name){
this.TypeName = "MyType1";
this.Name = name;
};
MyType1.prototype.SayHello = function() {
say(this.Name + " says hello...");
};
})();
Run Code Online (Sandbox Code Playgroud)
好的,现在,从那里开始,我想在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...");
};
})();
Run Code Online (Sandbox Code Playgroud)
现在我可以像这样使用这些类:
var x = new MyType1("Victor");
x.SayHello();
var c = new x.Child("Elizabeth");
c.Introduce();
Run Code Online (Sandbox Code Playgroud)
一切正常.但它为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;
})();
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.该parentName变种是超出范围,当然.
Child实例(在构造函数或任何类函数中)是否有一种有效的方式来访问父(MyType2)实例?
我知道我可以将Child类定义为一个独立的非嵌套类,然后在ctor中,只需传递Parent实例.但这会创建对父实例的N个引用,每个子实例都有一个引用.这似乎是我想避免的低效率.
谢谢你的任何提示.
编辑 - 我希望Child访问父实例的原因是父拥有一个创建起来相当昂贵的对象 - 类似于数据库连接 - 我希望孩子能够利用那个东西.
如果您在处理 javascript 时消除“类型”、“类”等概念,它可能会对您有所帮助。在 javascript 中,“类型”、“类”、“函数”、“实例”或“对象”没有区别——一直都是“对象”。
由于每个“类型”都是一个“对象”并且是可变的,因此您无法获得通过重用单个类型定义从 Java 或 C++ 中获得的强类型效率收益。将 javascript 中的“new”运算符想象为“克隆定义并调用构造函数”之类的东西,之后实例的定义仍然可以更改。
因此,请使用您的第一个工作示例:通过做不同的事情您不会获得任何收益。
| 归档时间: |
|
| 查看次数: |
13396 次 |
| 最近记录: |