js new一个函数和直接调用函数的差别
2017-05-20 09:46 tlnshuju 阅读(284) 评论(0) 编辑 收藏 举报用new和调用一个函数的差别:假设函数返回值是一个值类型(Number、String、Boolen)时,new函数将会返回这个函数的实例对象。而假设这个函数的返回值是一个引用类型(Object、Array、Funtion)时,new函数和直接调用函数的结果同样。測试代码例如以下:
<script type="text/javascript">
/*//工厂模式
function Person(name,age)
{
var o = new Object();
o.name = name;
o.age = age;
o.getName = function()
{
alert(this.name);
}
return o;
}
var obj1 = new Person("liwen",25);
var obj2 = Person("liwen1",25);
obj1.getName(); //liwen*/ new一个函数的实例对象
obj2.getName(); //liwen1*/ 直接调用
这里new一个函数的对象和直接调用函数产生的结果同样,都能够弹出这个函数的name属性。注意这里函数的返回值是一个Funtion对象
/*假设一个函数中存在return语句,调用这个函数的时候使用new和不使用new返回的结果是一样的吗?*/
function Test()
{
this.name = 'test';
return function()
{
return true;
}
}
//var test = new Test(); //function(){return true;} 它是Object
//var test = Test(); //function(){return true;} 它是Function
//alert(new Test() == Test()); //false 这就奇怪了。两都明明是一样的,都是函数,怎么不同样的,由于js对于Object和Funtion的比較是基于引用的。
//为了进一步分辨上述情形下两者间的差别,再继续看下面代码
function Test()
{
this.name = "test";
return "test";
}
var test1 = new Test(); //Object 对象,它有一个name 属性,而且返回一个字符串test
var test2 = Test(); //test ,它单纯是一个字符串
/*通过上面的代码,能够得出一个推測:假设函数返回值为常规意义上的数值类型(Number、String、Boolean)时,new函数将会返回一个该函数的实例对象,而假设函数返回一个引用类型(Object、Array、Function)时,则new函数与直接调用函数产生的结果同样*/
</script>
网上看的:用new和调用一个函数的差别:假设函数返回值是一个值类型(Number、String、Boolen)时,new函数将会返回这个函数的实例对象。而假设这个函数的返回值是一个引用类型(Object、Array、Funtion)时,new函数和直接调用函数的结果同样。測试代码例如以下:
<script type="text/javascript">
/*//工厂模式
function Person(name,age)
{
var o = new Object();
o.name = name;
o.age = age;
o.getName = function()
{
alert(this.name);
}
return o;
}
var obj1 = new Person("liwen",25);
var obj2 = Person("liwen1",25);
obj1.getName(); //liwen*/ new一个函数的实例对象
obj2.getName(); //liwen1*/ 直接调用
这里new一个函数的对象和直接调用函数产生的结果同样,都能够弹出这个函数的name属性。
注意这里函数的返回值是一个Funtion对象
/*假设一个函数中存在return语句,调用这个函数的时候使用new和不使用new返回的结果是一样的吗?*/
function Test()
{
this.name = 'test';
return function()
{
return true;
}
}
//var test = new Test(); //function(){return true;} 它是Object
//var test = Test(); //function(){return true;} 它是Function
//alert(new Test() == Test()); //false 这就奇怪了,两都明明是一样的。都是函数,怎么不同样的。由于js对于Object和Funtion的比較是基于引用的。
//为了进一步分辨上述情形下两者间的差别。再继续看下面代码
function Test()
{
this.name = "test";
return "test";
}
var test1 = new Test(); //Object 对象,它有一个name 属性,而且返回一个字符串test
var test2 = Test(); //test 。它单纯是一个字符串
/*通过上面的代码,能够得出一个推測:假设函数返回值为常规意义上的数值类型(Number、String、Boolean)时,new函数将会返回一个该函数的实例对象,而假设函数返回一个引用类型(Object、Array、Function)时,则new函数与直接调用函数产生的结果同样*/
</script>