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; // 关于 为什么要用句 ?
                   //还有它说:"最后一行代码删除了对 ClassA 的引用,这样以后就不能再调用它" 这句更不懂 
                  // 谁能举例说明一下啊    this.name = sName;
    this.sayName = function () {
        alert(this.name);
    };
}
var objA = new ClassA("blue");
var objB = new ClassB("red", "John");
objA.sayColor(); //输出 "blue"
objB.sayColor(); //输出 "red"
objB.sayName(); //输出 "John"    delete this.newMethod; // 关于 为什么要用句 ?
                   //还有它说:"最后一行代码删除了对 ClassA 的引用,这样以后就不能再调用它" 这句更不懂 
                  // 谁能举例说明一下啊

解决方案 »

  1.   

      delete this.newMethod; // 关于 为什么要用句 ?
      //还有它说:"最后一行代码删除了对 ClassA 的引用,这样以后就不能再调用它" 这句更不懂  
      // 谁能举例说明一下这句话的含意啊
      

  2.   

    这在《JavaScript语言精粹》里有阐述。
    其实是这样的
    newMethod = ClassA;
    就是说弄了一个ClassA的引用在里面
    newMethod(sColor)
    是执行了ClassA
    这样就给ClassB获得了this.Color和this.SayColor来模拟继承(其实我感觉是组合和合成)
    delete是删除newMethod。删除它就没有隐患了。举个不恰当的例子int a = 22;
    this.age = 22;
    delete a
    那么在后面的代码中就不能访问a了,但是有了this.age的属性