首页 新闻 会员 周边

不太懂javascript的对象

0
悬赏园豆:10 [已关闭问题] 关闭于 2015-10-14 09:40

<script type="text/javascript">

    function ClassA(sColor)
 {
   this.color=sColor;
   this.sayColor=function(){
     alert(this.color);
   }
 }
 function ClassB(sColor,sName){
     this.newMethod=ClassA;     
   this.newMethod(sColor);  
   delete this.newMethod;
   this.name=sName;
   this.sayName=function(){
     alert(this.name);
   }
 }
 var objA=new ClassA("red");
 var objB=new ClassB("blue","Nicholas");
 objA.sayColor();
 objB.sayColor();
 objB.sayName();

</script>

上面的   this.newMethod(sColor);  为什么不能写成this.newMethod=sColor呢

加油吧的主页 加油吧 | 初学一级 | 园豆:56
提问于:2011-03-27 15:46
< >
分享
所有回答(3)
0

function ClassB(sColor,sName){
     this.newMethod=ClassA;    

//////////////////////

上面定义了newMethod就是ClassA函数,说是对象也是函数。而ClassA是需要参数的function ClassA(sColor)

sColor是个参数啥类型的你知道吗?不一定是函数类型的,如果也是跟ClassA一样的 你这样写应该也没有错,不过就不是ClassA了

lixq0203 | 园豆:282 (菜鸟二级) | 2011-03-28 11:47
0

this.newMethod =ClassA 相当于 this.newMethod = function ClassA(sColor)
 {
   this.color=sColor;
   this.sayColor=function(){
     ;
   }
 }
 this.newMethod 是函数类型,this.newMethod(Scolor)是相当于调用函数ClassA,所以需要参数Scolor

爱研究源码的javaer | 园豆:930 (小虾三级) | 2011-03-28 12:56
0

function ClassA(sColor)
 {
   this.color=sColor;
   this.sayColor=function(){
     ;
   }
 }
 function ClassB(sColor,sName){
     this.newMethod=ClassA;    
   this.newMethod(sColor); 

.......

}

你可以将两个方法都看成是两个不同的类,而ClassB中有一个newMethod的属性,只是这个属性是ClassA类型的,类似于类中的复杂类型

this.newMethod(sColor); 其实是实例化ClassA,所以需要传递一个sColor的参数,sColor与newMethod是不同类型的,是不能用=赋值的

点滴收集 | 园豆:205 (菜鸟二级) | 2011-03-30 11:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册