主题:  关于继承的问题

Quaden

职务:普通成员
等级:1
金币:0.0
发贴:46
注册:2001/12/17 23:52:09
#12002/2/21 20:58:08
在看actionscript的书,有一个继承方面的问题:
例1:
function circle (radius) {
this.radius = radius
}
circle.prototype.area = function () {
return math.PI * this.radius * this.radius
}
mycircle = new circle (4);


例2:
function circle (radius){
this.radius = radius
this.area = function () {
return math.PI * this.radius * this.radius
}
}


书上说不推荐用例2这种方法,为什么呢?着两种有什么不同?



金山羊

职务:普通成员
等级:4
金币:10.0
发贴:827
注册:2002/1/6 14:44:13
#22002/2/21 21:25:19
这个问题以前遇到过,我试了用法也是一样的
不过我觉得是第一种方法便于扩展
而第二种方法修改起来不方便

不过我觉得这种方法更接近c++里面的类与其成员函数,不能算继承

编辑历史:[这消息被goldgoat编辑过(编辑时间2002-02-21 21:26:38)]

5d.cn
FLASHDEP
TECHNOLOGY SUPPORT
JAVA/ACTIONSCRIPT/javascript
CFML/JSP/COLDFUSION/FLASH REMOTING
JRUN/COLDFUSIONMX
FLASH/DREAMWEARER

Demon.S

职务:版主
等级:5
金币:10.0
发贴:2468
注册:2000/9/15 13:56:49
#32002/2/21 22:16:06
因为继承一个__proto__的时候,flash经常会导致找不到/丢失了__proto__的属性和方法,所以不只是method需要在class外定义,甚至property也要这样

Class=function(){}
Class.prototype.prop=abc;
Class.prototype.method=function(){//xyz}

DS



Quaden

职务:普通成员
等级:1
金币:0.0
发贴:46
注册:2001/12/17 23:52:09
#42002/2/22 8:42:57

谢谢两位了!



金山羊

职务:普通成员
等级:4
金币:10.0
发贴:827
注册:2002/1/6 14:44:13
#52002/3/4 10:14:00
画魔在上个帖子中说
引用:
因为继承一个__proto__的时候,flash经常会导致找不到/丢失了__proto__的属性和方法,所以不只是method需要在class外定义,甚至property也要这样

Class=function(){}
Class.prototype.prop=abc;
Class.prototype.method=function(){//xyz}

DS




说得没有错,不过我现在觉得,这两种方式是不同的两种方式,flash是为了实现不同的功能,而不是丢失了。例如:
A = function(){}
A.prototype.x = 1;
myA = new A();
myA.x = 2;//myA.x ==2;
delete myA.x;//myA.x == 1;


A = function()
{
this.x = 1;
}
myA = new A();//myA.x == 1;
myA.x = 2;//myA.x ==2;
delete myA.x;//myA.x == null;


5d.cn
FLASHDEP
TECHNOLOGY SUPPORT
JAVA/ACTIONSCRIPT/javascript
CFML/JSP/COLDFUSION/FLASH REMOTING
JRUN/COLDFUSIONMX
FLASH/DREAMWEARER

Demon.S

职务:版主
等级:5
金币:10.0
发贴:2468
注册:2000/9/15 13:56:49
#62002/3/4 13:06:21
你的是继承的prop,而不是proto的属性……



金山羊

职务:普通成员
等级:4
金币:10.0
发贴:827
注册:2002/1/6 14:44:13
#72002/3/4 15:37:31
画魔在上个帖子中说
引用:
你的是继承的prop,而不是proto的属性……


是这样吧:
A = function ()
{
this.x = 1;
this.method = function ()
{
trace(this.x);
}
};
B = function (){}
B.prototype.__proto__ = A.prototype ;


5d.cn
FLASHDEP
TECHNOLOGY SUPPORT
JAVA/ACTIONSCRIPT/javascript
CFML/JSP/COLDFUSION/FLASH REMOTING
JRUN/COLDFUSIONMX
FLASH/DREAMWEARER