首页 新闻 会员 周边

javascript模拟类的问题

0
悬赏园豆:10 [已解决问题] 解决于 2010-03-10 11:20

最近看了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() {};,望牛人给指个道!!

问题补充: 早上来到公司,问了同事才知道。原来是这种做法是直接指向,影响了superclass中的constructor.第一种做法是对的是链式查找。
ForFreeDom的主页 ForFreeDom | 小虾三级 | 园豆:589
提问于:2010-03-09 23:22
< >
分享
最佳答案
0

通过一空函数实现继承,不然,修改/扩展subClass.prototype就会影响到superClass.prototype

收获园豆:8
已注册用户 | 菜鸟二级 |园豆:233 | 2010-03-10 10:52
其他回答(1)
0

呵呵 昨天晚上就看到这个问题了,这个记得最早是在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;
        }

收获园豆:2
西越泽 | 园豆:10775 (专家六级) | 2010-03-10 09:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册