关于javascript定义类与对象
在说这个话题之前,我想先说几句题外话:最近偶然碰到有朋友问我“hoisting”的问题。即在js里所有变量的声明都是置顶的,而赋值则是在之后发生的。可以看看这个例子:
?
var Obj = function (name) { this.name = name; this.flag = new Array('A', 'B'); if (typeof Obj._init == 'undefined') { Obj.prototype = { showName : function () { alert(this.name); } }; Obj._init = true; }};?
?
如上,用_init作为一个标志来判断是否已经给原型创建了方法。如果是那么就不再执行。这样其实在本质上是没有任何变化的,方法仍是通过原型创建,唯一的区别在于这个构造函数看起来“江山统一”了。
但是这种动态原型的方式是有问题的,《JavaScript高级程序设计》里并没有深究。创建第一个对象的时候会因为prototype在对象实例化之前没来的及建起来,是根本无法访问的。所以第一个对象是无法访问原型方法的。同时这种方式在子类继承中也会有问题。
关于解决方案,我会在下一文中说明。?
其实就使用方便来说的话,个人觉得是没必要做这个判断的。。。呵呵 ^_^
?
转帖来自:http://www.cnblogs.com/hongru/archive/2010/11/08/1871359.html
?
?