首页 新闻 会员 周边 捐助

javascript中的继承机制

0
悬赏园豆:30 [待解决问题]

初学jscript,被里面继承机制搞的有点晕。

书上上通过对象冒充来实现继承,如下:

 

1 function ClassA(sColor) {
2 this.color = sColor;
3 this.sayColor = function() {
4 alert(this.color);
5 };
6 }
7
8 function ClassB(sColor, sName) {
9 this.newMethod = ClassA;
10 this.newMethod(sColor);
11 delete this.newMethod;
12
13 this.name = sName;
14 this.sayName = function() {
15 alert(this.name);
16 }
17
18 }
19
20 var objA = new ClassA("red");
21 objA.sayColor();
22 var objB = new ClassB("blue", "Nickname");
23 objB.sayColor();
24 objB.sayName();

 

 

 



疑问:在ClassB中delete this.newMethod是什么意思?

        如果是删除这个属性,后面的代码objB.sayColor是如何访问classA中的sayColor()函数的?

请给解析一下,谢谢!

风云Fyun的主页 风云Fyun | 初学一级 | 园豆:5
提问于:2010-10-05 16:55
< >
分享
所有回答(4)
0
Astar | 园豆:40805 (高人七级) | 2010-10-06 11:28
这篇文章完成把“Javascript高级程序设计”这本书的讲jscript继承机制的内容抄下来了,晕。
支持(0) 反对(0) 风云Fyun | 园豆:5 (初学一级) | 2010-10-06 16:32
@风云'WindCloud:应该就是学习笔记,人家解释的已经够清楚了呀。
支持(0) 反对(0) Astar | 园豆:40805 (高人七级) | 2010-10-06 16:35
0

在这段代码中,位ClassA赋予了方法newMethod。然后调用该方法,传递给它的是ClassB的构造参数sColor。最后一行代码删除了对 ClassA的引用,这样以后就不能在调用它。所有的新属性和新方法都必须在删除了新方法的代码行后定义,否则,可能会覆盖超类的相关属性和方法。网上是这样说的,不过很令人费解。你看看这篇文章吧!

日心尧亘 | 园豆:235 (菜鸟二级) | 2010-10-06 11:33
说的跟书上一摸一样!
支持(0) 反对(0) 风云Fyun | 园豆:5 (初学一级) | 2010-10-06 16:29
@风云'WindCloud:网上好像都是这样说的啊……也不太清楚……
支持(0) 反对(0) 1024114660 | 园豆:215 (菜鸟二级) | 2010-10-06 16:32
0

我测了一下,那个delete不加也是可以的,那个仅仅是告诉你已经,跟classA无关了,其实这个算不上真正的继承,真正的继承,是利用原型,进行继承的,你这个仅仅是把一个函数的变量,传给另一个函数的一个变量而已,而那个this当然是当前的this了。

chenleinet | 园豆:270 (菜鸟二级) | 2010-10-07 01:31
0

好烂的代码……根本不用this.newMethod,只要var baseCtor = ClassA做一下局部变量就行  

Gray Zhang | 园豆:17610 (专家六级) | 2010-10-07 13:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册