码迷,mamicode.com
首页 > 编程语言 > 详细

Javascript 使用new 关键字调用函数和直接调用函数的区别

时间:2017-08-25 10:48:28      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:rip   turn   初始化   false   构造   浏览器   java   boolean   不同   

1.函数有返回值

$(function(){
function Person(name,age,job){
var o=new Object();
o.name=name;
o.age=age;
o.job=job;
o.sayHi=function(){
console.log(this.name);
}
return o;
}
var people= new Person(‘xiaowang‘,24,‘developer‘);//new
people.sayHi();

var people1= Person(‘xiaowang‘,24,‘developer‘);
people1.sayHi();
});

验证得到,new关键字调用和直接调用的结果是一样的

Person函数创建了一个对象,并以相应的属性和方法初始化该对象,然后又返回了这个对象,除了使用new操作符且把使用的包装函数叫做构造函数之外,这个模式跟工厂模式是一模一样的。

2.如果函数没有返回值

$(function(){
function Person(name,age,job){
//var o=new Object();
this.name=name;
this.age=age;
this.job=job;
this.sayHi=function(){
console.log(this.name);
}
//return o;
}
var people= new Person(‘xiaowang‘,24,‘developer‘);//new
people.sayHi();

var people1= Person(‘xiaowang‘,24,‘developer‘);
people1.sayHi();
});

注意:构造函数在不返回值的情况下,默认返回新对象实例。

new 调用会正常工作,而直接调用会出错

3..如果返回值为函数

$(function(){

function Person(){
this.name=‘test‘;
return function(){return true};
}
var people= new Person();//构造对象
var people1= Person();//直接调用

console.log(people==people1);
console.log(people===people1);
});

虽然浏览器结果一样,但是比较结果都是false,因为javascript对object和function比较是基于引用类型的。

4.如果返回值为值类型(例如:number)

$(function(){
function Person(){
this.name=‘test‘;
return 2;//function(){return true};
}
var people= new Person();//构造对象
var people1= Person();//直接调用

console.log(people==people1);
console.log(people===people1);
});

比较结果发现结果都是false。

所以得出猜测

如果函数返回值为常规意义上的值类型(Number、String、Boolean)时,new 函数将会返回一个该函数的实例对象,而如果函数返回一个引用类型(Object、Array、Function),虽然new函数与直接调用函数产生的结果等同,但是是两个不同的过程,一个是构造对象、一个是函数调用。

 

Javascript 使用new 关键字调用函数和直接调用函数的区别

标签:rip   turn   初始化   false   构造   浏览器   java   boolean   不同   

原文地址:http://www.cnblogs.com/Seamless/p/7426627.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!