市面上流行了很多 JavaScript 面向对象的编程方法,其中不少都有好些问题。这里总结最正确的 javaScript 面向对象编程模式。
对于类 Special 继承自类 Common 继承自类 Super 的情况,一个 Special 对象的创建,详细说来,应该经历以下步骤。
1 确定继承关系
1.1 读取 Special 的父类,发现是 Common
1.2 读取 Common 的父类,发现是 Super
1.3 读取 Super 的父类,发现没有了(隐形父类 Object)
2 加载类结构(如果没有加载的话。加载过的话则不需要重复加载)
2.1 加载 Super, Common, Special 类的类属性和类方法都有哪些
2.2 加载 Super 类对象具有哪些属性,哪些方法
2.3 加载 Common 类对象具有哪些属性,哪些方法
2.4 加载 Special 类对象具有哪些属性,哪些方法
2.5 给 Super, Common, Special 类的类属性分配空间
2.6 给 Super, Common, Special 类的类属性赋值
3 分配堆空间
3.1 分配 Super 的空间,包括 Super 所有成员的空间
3.2 分配 Common 的空间,包括 Common 所有成员的空间
3.3 分配 Special 的空间,包括 Special 所有成员的空间
4 初始化对象
4.1 调用 Super 的构造方法
4.2 调用 Common 的构造方法
4.3 调用 Special 的构造方法
那么,怎么用 JavaScript 合理并严格地依照标准对象构建顺序创建对象呢?
1 确定继承关系。因为 JavaScript 没有变量类型绑定,所以应该能够允许多继承。其中第一个父类为主父类。
Super._super = [ ];
Common._super = [ Super ];
Special._super = [ Common ];
2 加载类结构
这里涉及到一个技术,熟悉 JavaScript 面向对象编程的人都会很了解,称为原型链(prototype chaining)。JavaScript 面向对象的类结构,其实是靠每一个类的原型对象来保存的。每生成一个对象,都是根据原型对象,制作一个与之具有同样成员,成员值也都相同的新对象。如果直接让一个类的原型对象等于一个其父类的对象,就相当于复制了父类原型的所有成员,放入了当前类的原型中。这些成员除了显示可见的意外,还包括用于 instanceof 的类名属性等一些系统成员变量,从而能够实现子类成员 instanceof
父类类名,得到 true 的结果――这种认定用的属性可以传递给更下一层的子类。
除了由原型链形成的主继承之外,因为 JavaScript 没有引用类型的概念,也就没有接口的概念。所以需要手动加载除主父类以外的其余父类成员。通过 for (var xxx in xxx) 的方式,可以取出其余父类原型中的成员,并用其建立当前类的类结构。这里需要注意,如果各种父类中有名称完全相同的方法,则会以最后加载进来的那个为子类的方法。这不得不说是 JavaScript 面向对象多重继承的一个遗憾。 本文链接http://www.cxybl.com/html/wyzz/JavaScript_Ajax/20120608/28900.html
欢迎大家阅读《js面向对象 编程: JavaScript 面向对象…_js》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码