问题就在于
return this;
这时其实返回的是一个Object,所以第四条第五条测试其实就相当于alert(new Object==new Object);你将self改为:
String.prototype.self=function(){
    return this.toString();
}再试试;

解决方案 »

  1.   

    JS中有三种基本数据类型(Basic Data Types),即 String、Number、Boolean
    "s"是一个字符串常量,
    而"s".self()则返回一个字符串实例,用 instanceof 一测便知!
    L@[email protected]=function()
    {
    return this;
    }
    var s="s";
    alert(s.constructor); // String()
    alert(s instanceof String ); // false
    alert(s.constructor); // String()
    alert(s.self() instanceof String ); // true
      

  2.   

    书上说是三种基本数据类型滴!还有三种复合类型:Objects、Array、Functionundefined和null算作特殊类型吧,记不清了,哈
      

  3.   

    <script type="text/ecmascript">
    String.prototype.self = function() {
    return this;
    };var s = "s";alert("s".self() === "s") //falsealert("s".self() == "s".self()) //false 两个实例怎么可能相等呢
    alert(s.self() == s.self()) //false 同样的道理//好比alert(new String(s).self() == new String(s).self());//就是说"s".self或者s.self 把s转换成了string object
    </script>
    前面那些只是偷偷的进行了类型转换,如果换成恒等,就不会出现true了..