绕着弯“秀”你的---构造函数
Posted liuyt0219
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了绕着弯“秀”你的---构造函数相关的知识,希望对你有一定的参考价值。
前几天看到别人问的两个问题,当时还有点懵逼,其实细细想来只不过是在秀你吧了。
题目如下:
一:
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 无异。。。
以上是关于绕着弯“秀”你的---构造函数的主要内容,如果未能解决你的问题,请参考以下文章