最近看了javascript设计模式。模拟类用以下方式
/* Extend function. */
function extend(subClass, superClass) {
var F = function() {};
F.prototype = superClass.prototype;
subClass.prototype = new F();
subClass.prototype.constructor = subClass;
}
为什么不直接
/* Extend function. */
function extend(subClass, superClass) {
subClass.prototype = superClass.prototype;
subClass.prototype.constructor = subClass;
}
中间还要多个空函数var F = function() {};,望牛人给指个道!!
通过一空函数实现继承,不然,修改/扩展subClass.prototype就会影响到superClass.prototype
呵呵 昨天晚上就看到这个问题了,这个记得最早是在51js上Winter写过,不过这个在javascript高级编程一书中有过相关描述,只是可怜我怎么也上不了51js,郁闷中,只好找个引用51js的文章,里面是如下说明的。
//修改了prototype也就删除了其中的constructor属性
//constructor 属性是所有具有 prototype 的对象的成员 表示创建对象的函数也就是它本身
//constructor 属性保存了对构造特定对象实例的函数的引用
function extend(subClass,superClass) {
var F = function() {};
F.prototype = superClass.prototype;
subClass.prototype = new F();
subClass.prototype.constructor = subClass;
subClass.superClass = superClass.prototype;
superClass.prototype.constructor = superClass;
}