Js new一个函数和直接调用函数的区别

不实用new,也就是普通的函数调用而已,所以若是函数本身没有返回值,普通的函数调用没有什么意义
如:
var person=new Person();//person是一个对象
var person = Person();//这只是一次普通的函数调用并赋值而已。

例一:

	function Person(name,age){  
	this.name=name;  
	this.age=age;  
	this.sayName=function(){  
	alert(this.name);  
	      };  
	}  

//var person=new Person(“张三”,20); //此处为 构造对象,构造对象的话,返回的新对象是由解析器自己生成的。
var person=Person(“张三”,20); //假设我在Person函数里面加了return “你好”; 这时的person就不会报undefined,而是一个字符串你好
person.sayName();//报错 person undefined 此处为普通函数调用,又没有给定返回值,出错。

//因为此时this指向window对象,
window.sayName();//此时不会报错

接下来就问,为什么我赋值给person,可以用window来引用呢?
因为如果不用new就相当于普通函数调用,而 Person()根本没有返回值,
所以Person根本就没赋值给person,此时的person只是一个undefined,
但是Person却执行了一次,成为了window的对象,this指向了window,所以window可以直接使用Person的方法,

Person(“张三”,20);
person.sayName();

例二:
如果函数返回值为常规意义上的数值类型(Number、String、Boolean)时,new函数将会返回一个该函数的实例对象,
而如果函数返回一个引用类型(Object、Array、Function)时,则new函数与直接调用函数产生的结果相同。
如下:

function Test()  
 {  
	  	this.name = "test";  
  		return "test";  
}  

 var test1 = new Test();   //Object 对象,它有一个name 属性,并且返回一个字符串test  
 var test2 = Test();    // 函数Test()属于Function对象   这个test2,它单纯是一个字符串  

工厂模式

<script type="text/javascrip">
/*//工厂模式 
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对象

过程:
构造函数不需要显示的返回值。使用new来创建对象(调用构造函数)时,如果return的是非对象(数字、字符串、布尔类型等)会忽而略返回值;如果return的是对象,则返回该对象。
下面简单介绍下,javascript中new对象的过程:如var myObj = newPerson(“aty”,25);
1.创建一个空的Object对象.var obj = new Object();
2.将构造函数Person中this指向刚创建的obj对象
3.将创建的obj的__proto__指向构造函数Person的prototype。这一步是建立对象和原型直接的对应关系。firefox下通过
对象的__proto__属性能够访问到原型,IE下则没有暴露出相应的属性。
4.执行构造函数Person()中的代码
原文:https://blog.csdn.net/zchdjb/article/details/53038656

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值