初学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()函数的?
请给解析一下,谢谢!
在这段代码中,位ClassA赋予了方法newMethod。然后调用该方法,传递给它的是ClassB的构造参数sColor。最后一行代码删除了对 ClassA的引用,这样以后就不能在调用它。所有的新属性和新方法都必须在删除了新方法的代码行后定义,否则,可能会覆盖超类的相关属性和方法。网上是这样说的,不过很令人费解。你看看这篇文章吧!
我测了一下,那个delete不加也是可以的,那个仅仅是告诉你已经,跟classA无关了,其实这个算不上真正的继承,真正的继承,是利用原型,进行继承的,你这个仅仅是把一个函数的变量,传给另一个函数的一个变量而已,而那个this当然是当前的this了。
好烂的代码……根本不用this.newMethod,只要var baseCtor = ClassA做一下局部变量就行