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