不实用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/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对象  
 

过程:

构造函数不需要显示的返回值。使用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()中的代码

 

技术
©2019-2020 Toolsou All rights reserved,
LinkedHashMap基本用法&使用实现简单缓存 dedecms网站被黑 劫持到其他网站如何解决苹果不送充填器耳机真为环保?可能还是为了赚钱吧图片格式转换错误总结-myBatis plus 分页numpy:多维数组的创建用C语言做很简单的飞机游戏Keras保存与加载模型(JSON+HDF5)福布斯中国汽车富豪榜:何小鹏第11 李想第14 李斌第15hive大量小文件处理方法总结