函数有返回值并使用new操作符

前几天看到别人问的两个问题:

题目如下:

一:

var fun = function() {
this.name = 'peter';

return {
name: 'jack'
};

}

var p = new fun()
p.name

二:

var fun = function() {
this.name = 'peter';

return 'jack';
}

var p = new fun();
p.name;

 

这种现象应该怎么解释呢:

当我们创建一个函数的时候:

function fun (){};

如果我们要使用这个函数怎么办? 没错  就是直接  fun();  是不是。。。很s13。。。

当我们使用一个函数的原型对象的时候呢?fun.prototype.fn1=function(){//xxx}   var  newFun =new fun()   newFun.fn1();

那么问题来了 :当函数有返回值,然后使用这个函数   同时又使用new 操作符实例化这个函数的时候 会有哪些情况?

一:当返回值是一个引用类型  function array object 

那么无论是否使用 new操作符 实例化出来的结果  都是函数 fun()的返回值:var  p =new fun()  //p等于 函数fun的返回值

并且 p 不能使用fun()的原型对象 ,即 p.fn1() //会报错。

二:当返回值是一个基本类型 number undefined  string null 

那么无论是否使用new 操作符 实例化出来的结果  跟正常使用 构造函数  实例化是一样的。 var p=new fun()  // p的使用和正常构造函数实例化使用

是一样的 即 p.fn1() // 正常

最后 :当函数没有返回值的时候  默认返回 undefined  。 new  fun() 的时候  有返回值,而且返回一个基本类型无论是 number string null undefined  跟返回undefined  无异。。。

转载于:https://www.cnblogs.com/liuyt0219/p/10478626.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值