Function.prototype.extends = function(obj){       for(var each in obj)       {              this.prototype[each] = obj[each];  //对对象的属性进行一对一的复制,但是它又慢又容易引起问题//所以这种“继承”方式一般不推荐使用       }}var Point2D = function(){       ……}Point2D.extends(new Point()){       ……}

解决方案 »

  1.   

    目前继承一直用call和apply  >_<
      

  2.   

    听说,call和apply在继承时有区别:call的,能继承构造函数和原型设置中的所有属性,而apply的只继承构造函数中的属性,是这样吗?
      

  3.   

    call和apply只是参数不同,它们都不能继承原型。
      

  4.   

    另一个问题中对此的讨论:http://topic.csdn.net/u/20091202/17/ae345213-d764-45d1-974e-01720c38d310.html?seed=447787441&r=61678875#r_61678875
    apply不会应用对象prototype新增的方法或属性. 
    你把function B()改为 function B(){A.call(this);} 使用call来继承A,就可以正常输出8了
      

  5.   

    http://topic.csdn.net/u/20091202/17/ae345213-d764-45d1-974e-01720c38d310.html
    这里10楼主说,apply 不继承,call继承。请 读下它的回复,好吗
      

  6.   

    <script type="text/javascript">
    var o = function(ppt){
        this.ppt = ppt;
    };
    o.prototype.ptt = 'prototype[ptt]';var o2 = function(ppt){
        o.call(this,ppt);
    };var o3 = function(){
        var arr = Array.prototype.slice.call(arguments,0);
        o.apply(this,arr);
    };var a = new o('a');
    var b = new o2('b');
    var c = new o3('c');alert(a.ppt+'\n'+a.ptt);
    alert(b.ppt+'\n'+b.ptt);
    alert(c.ppt+'\n'+c.ptt);</script>
      

  7.   

    楼上的例子 ppt /ptt ,容易让人迷糊,我开始分不清,以为是多写一遍作验证呢!
    拜读,消化。明白了。