绕着弯“秀”你的---构造函数

前几天看到别人问的两个问题,当时还有点懵逼,其实细细想来只不过是在秀你吧了。

题目如下:

一:

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()   new.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  无异。。。

猜你喜欢

转载自www.cnblogs.com/liuyt0219/p/10478626.html