日期:2014-05-16  浏览次数:20392 次

我想给String构造函数添加一个删除第一个字母的方法,发现它里面的this可以进行字符操作!this不是个对象吗?
JScript code

String.prototype.del=function(){
     alert(typeof(this))  
     var str=this.substr(1)
     return str
}
var arr=new String(789)
alert(arr.del())



alert(typeof(this))是object,它为啥能进行字符操作呢?代码如上:
而我自己定义的类似String的类就不能进行字符操作啊? 代码如下:

JScript code

function myString(){
        this[0]=arguments[0];
}
myString.prototype.del=function(){
     alert(typeof(this))      
     var str=this.substr(1)
     return str
}
var arr=new myString(123456)
alert(arr.del())





------解决方案--------------------
在这里this就代表当前的引用对象String的一个实例,你应该找一下this.xx它扩展自String类,肯定会有一个属性保存string的值得。
------解决方案--------------------
JScript code

var a='123';
alert(typeof a);//a为原始String类型,弹出string
a=new String('123');//调用String的构造器构造一个String对象,它是String原始值的对象表示法
alert(typeof a);//a是一个对象,弹出object
alert(Object.prototype.toString.apply(a));//弹出[object String],这种方式获取一个值的类型比较准确,可以每种类型都试试。

String.prototype.del=function(){
     alert(typeof(this))  
     var str=this.substr(1)//String对象有一个substr方法,所有String原始值也有这个方法,因为String实际上是一个伪String对象
     return str
}
var arr=new String(789)
alert(arr.del())

function myString(){
        this[0]=arguments[0];
}
myString.prototype.del=function(){
     alert(typeof(this))      
     var str=this.substr(1)//这里是你自定义的一个类myString,它未继承String,它没有substr方法。
     return str
}
var arr=new myString(123456);
alert(arr);
alert(arr.del());//查看js错误控制台,这里会提示错误,对象没有substr方法。
/**
 * 实际上你的myString类只有一个属性,属性下标为'0'
 */

------解决方案--------------------
var arr=new String(789);
//这个本身就是一个String类型的Object, String 对象的方法 slice()、substring() 、substr()