前几天看到别人问的两个问题:
题目如下:
一:
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 无异。。。