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;
    //为什么要删除
}
请写出详细的理解

解决方案 »

  1.   

    买本十万个为什么吧...说笑的..这个感觉你还是系统的去看一下JAVASCRIPT的学习文档
      

  2.   

    关键是this的用处,只能意会了。
      

  3.   


      this.newMethod = ClassA; 
    this.newMethod(sColor); //这就相当与在对象自己身上调用ClassA函数,ClassA的this指向了ClassB
    //相当与 ClassA.call(this);
    delete this.newMethod; //用完就删除,如果是 ClassA.call(this)就不用删除了
      

  4.   

    理解这儿需要的知识是 成员方法中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);