js用对象冒充实现继承如何理解,代码理解不了

yuji821 2012-03-28 12:01:06
function ClassA(sColor)
{
this.color = sColor;
this.sayColor = function() {
alert(this.color);
}
}
function ClassB(sColor)
{
this.newMethod = ClassA; //什么意思
this.newMethod(sColor); //这样写下为什么就得到了ClassA定义的属性和方法
delete this.newMethod;
//为什么要删除
}


请写出详细的理解
...全文
268 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
未知数 2012-03-28
  • 打赏
  • 举报
回复
理解这儿需要的知识是 成员方法中this的指代 this定义成员 直接给对象添加成员
function ClassB(sColor)//把此函数看作构造函数
{
this.newMethod = ClassA; //字面意思,定义成员方法,把函数ClassA作为成员方法
this.newMethod(sColor); //执行成员方法,成员方法里面this指代类的实例,该方法给该实例添加了color,sayColor两个成员,不是你想的得到了ClassA的成员
delete this.newMethod; //此方法已经执行,删不删都一样,不影响属性的添加,区别只在构造出的对象中是否存在该方法,如果不删除,还可以在实例中调用该方法,修改那两个成员的值
}

下面的写法能有同样效果,可以帮助你理解:
function ClassB(sColor)//把此函数看作构造函数
{
this.newMethod = ClassA; //字面意思,定义成员方法,把函数ClassA作为成员方法
}
var objB=new ClassB();
objB.newMethod("red");//在对象中调用该方法,同样可以给对象添加那两个成员,原写法在构造函数中调用只是调用时间的区别,实质是相同的,能理解么?
alert(objB.color);
挨踢直男 2012-03-28
  • 打赏
  • 举报
回复

this.newMethod = ClassA;
this.newMethod(sColor); //这就相当与在对象自己身上调用ClassA函数,ClassA的this指向了ClassB
//相当与 ClassA.call(this);
delete this.newMethod; //用完就删除,如果是 ClassA.call(this)就不用删除了
Acesidonu 2012-03-28
  • 打赏
  • 举报
回复
关键是this的用处,只能意会了。
还在加载中灬 2012-03-28
  • 打赏
  • 举报
回复
买本十万个为什么吧...

说笑的..

这个感觉你还是系统的去看一下JAVASCRIPT的学习文档

87,937

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧