都是 prototype.js 这个东东惹的祸,严格来讲你第二种写法是错误的写法,String.prototype 已经是一个内建的对象了,你只需对它进行属性扩充即可,而你对它进行了赋值且你赋的还是一个 new Object(),象String 这样的系统对象的 prototype 不等同 new Object()

解决方案 »

  1.   

    都是 prototype.js 这个东东惹的祸
    ================================
    同意,呵呵 :)
      

  2.   

    貌似某大哥去年的某时间说过。。
    String之类的内置对象的prototype对象的引用只读的。。
      

  3.   

    看过一篇类的继承机制的文章,里面提到:
    function class1{
    }
    class1.prototype = {
    ...
    }function class2{
    }for(var p in class1.prototype){
     class2.prototype[p] = class1.prototype[p];
    }如果再给class2添加成员也只必须使用
    class2.prototype.xxx = xxx我可以理解为
    class2.prototype = {
     //成员
    }
    的方式只能用于父类成员的定义吗?
      

  4.   

    //String之类的内置对象的prototype对象的引用只读的。。意思是说String.prototype = {}这样的方式会重写类的方法吗?
      

  5.   

    又发现一段话~所有 JScript 固有对象都有只读的 prototype 属性。可以象该例中那样为原型添加功能,但该对象不能被赋予不同的原型。然而,用户定义的对象可以被赋给新的原型。
      

  6.   

    <script type="text/javascript">
    var old = String.prototype, new_ = {};
    String.prototype = new_;
    alert((old == String.prototype) + ":" + (old == new_));
    </script>
    是这个意思,你看下就知道了。。
    这个例子证明
    String.prototype = new_;没有付值成功。。
      

  7.   

    http://bbs.51js.com/viewthread.php?tid=67217&highlight=%2B%D4%C2%D3%B0
      

  8.   

    所以,是只读。。^o^
    <script type="text/javascript">
    var old = String.prototype, new_ = {};
    String.prototype = new_;
    alert((old == String.prototype) + ":" + (String.prototype == new_));
    </script>
    这样。。那个写错了。。