//双精度浮点数包装类
function Double(value)
{
value=parseFloat(value);
if(!isNaN(value) && this && this.constructor==arguments.callee)
{
//如果是作为构造函数执行,那么满足this.constructor==arguments.callee
//这个时候构造一个Double对象,给出doubleValue()和valueOf()方法
this.doubleValue=function()
{
return value+"double";
}
this.valueOf=function()
{
return value;
}
this.toString=function()
{
return value.toString()+"string";
}
}
else
return value;//否则直接返回该值
}
var d_boxing=new Double(123.34); //d_boxing是一个包装对象
var d_unboxing=Double("123.34"); //d_unboxing是一个普通数值
dwn(d_boxing.doubleValue());
dwn(typeof d_boxing);//
dwn(d_unboxing);
dwn(typeof d_unboxing);//对这这里面有几个不明白,忘高手指点,分只给最详细的人
1.this写在if里面表示怎么意思
2.this.constructor表示是什么意思
3.arguments.callee表示是什么意思
4.在什么时候this.constructor==arguments.callee
5.为什么d_boxing为object类型,d_unboxing为number类型
6.在没有指定调用if里面的三个方法即(doubleValue(),valueOf(),toString)的时候,系统会自动调用哪一个方法,为什么
.分只给最详细的人,谢谢
function Double(value)
{
value=parseFloat(value);
if(!isNaN(value) && this && this.constructor==arguments.callee)
{
//如果是作为构造函数执行,那么满足this.constructor==arguments.callee
//这个时候构造一个Double对象,给出doubleValue()和valueOf()方法
this.doubleValue=function()
{
return value+"double";
}
this.valueOf=function()
{
return value;
}
this.toString=function()
{
return value.toString()+"string";
}
}
else
return value;//否则直接返回该值
}
var d_boxing=new Double(123.34); //d_boxing是一个包装对象
var d_unboxing=Double("123.34"); //d_unboxing是一个普通数值
dwn(d_boxing.doubleValue());
dwn(typeof d_boxing);//
dwn(d_unboxing);
dwn(typeof d_unboxing);//对这这里面有几个不明白,忘高手指点,分只给最详细的人
1.this写在if里面表示怎么意思
2.this.constructor表示是什么意思
3.arguments.callee表示是什么意思
4.在什么时候this.constructor==arguments.callee
5.为什么d_boxing为object类型,d_unboxing为number类型
6.在没有指定调用if里面的三个方法即(doubleValue(),valueOf(),toString)的时候,系统会自动调用哪一个方法,为什么
.分只给最详细的人,谢谢
系统哪个都不会调用,除非你手写去调用这个对象的方法,比如 toString
而d_boxing存的是个对象的引用,在JavaScript中函数变量(对象)和字符串变量还有数组变量存的都是引用,所以它只能
属于object类型的。六、如果你if里面为空,它会调用valueOf(),toString().
1. this 只要在对象里面就是表示它代表的是这个对象本身, 不管它是在if for的那里。
2. this.constructor表示对象的构造函数,即function Double(value) {……}
3. arguments.callee 指的是调用这个函数的函数引用,如果是没有函数调用 则为null.
4.5 楼上都说了。
6.在没有指定调用if里面的三个方法即(doubleValue(),valueOf(),toString)的时候,系统会自动调用哪一个方法,为什么
没太明白你说意思??我理解,系统不会自动调用那一个方法的。 只能 var d_boxing=new Double(123.34); d_boxing.toString();这样来调用。
2: constructor 是对象的构造行数,但是他只对构造(new)对象有意义,这是他很trick的地方:
var d_unboxing=Double("123.34"); 这句话的执行过程中,constructor 没有意义;
var d_boxing=new Double(123.34); 这句话中constructor 就是Double这个function.
我给你一个更简单的例子你就明白了:function Foo(){
alert(arguments.callee==this.constructor);
}
var a = new Foo();//构造对象
Foo();//直接调用函数看看这执行的结果。
3: 但是callee总是有意义的,不管你是直接调用函数还是把这个函数用来构造对象。function Foo(){
alert(arguments.callee);
}
var a = new Foo();
Foo();4: 综合上面的2,3,当你用Double构造对象的时候callee和constructor是一致的。
5: 因为d_boxing是你new出来的,而且根据你的构造函数,它会走if(!isNaN(value) && this && this.constructor==arguments.callee)这个分支,构造了一个完整的Double对象。d_unboxing是你直接调用Double,将会走else return value;分支,返回value本身;
6: 我是这样理解的:如果你alert(d_boxing);则会打印出toString()的内容;如果你把toString方法去掉,则会打印出[object Object];这是它的prototype的toString方法返回的东西。
2: constructor 是对象的构造行数,但是他只对构造(new)对象有意义,这是他很trick的地方:
var d_unboxing=Double("123.34"); 这句话的执行过程中,constructor 没有意义;
var d_boxing=new Double(123.34); 这句话中constructor 就是Double这个function.
我给你一个更简单的例子你就明白了: JScript code
function Foo(){
alert(arguments.callee==this.constructor);
}
var a = new Foo();//构造对象
Foo();//直接调用函数看看这执行的结果。
3: 但是callee总是有意义的,不管你是直接调用函数还是把这个函数用来构造对象。 JScript code
function Foo(){
alert(arguments.callee);
}
var a = new Foo();
Foo();4: 综合上面的2,3,当你用Double构造对象的时候callee和constructor是一致的。
5: 因为d_boxing是你new出来的,而且根据你的构造函数,它会走if(!isNaN(value) && this && this.constructor==arguments.callee)这个分支,构造了一个完整的Double对象。d_unboxing是你直接调用Double,将会走else return value;分支,返回value本身;
6: 我是这样理解的:如果你alert(d_boxing);则会打印出toString()的内容;如果你把toString方法去掉,则会打印出[object Object];这是它的prototype的toString方法返回的东西。
正解
其他同
alert(arguments.callee==this.constructor);
}
var a = new Foo();//true 构造对象
Foo();//false 直接调用函数 ----------
function Foo(){
alert(arguments.callee);
}
var a = new Foo();
Foo();
------------
function Foo(){
alert(this.constructor);
}
var a = new Foo();
Foo();//undefined运行以上三段代码,就能理解:constructor 只是对 new 出的对象 有效,也就是说,是 new出对象的一个属性,是儿子才有的属性,老子没有的
arguments.callee 属性总是有效的,不管你是直接调用函数还是把这个函数用来构造对象。