new初始化方法函數
簡單沒有return的就不寫了this
function Person() { this.name="hongda"; this.age=28; return "fffffff"; } var p = new Person(); console.dir(p); console.log(typeof p); var pp=Person(); console.log(pp); console.log(typeof pp);
function Person() { this.name="hongda"; this.age=28; return new String("fffff"); } var p = new Person(); console.dir(p); console.log(typeof p); var pp=Person(); console.log(pp); console.log(typeof pp);
從上面能夠發現,若是返回的類型是object時,那麼構造函數初始化返回的就是return返回的objectspa
若是return返回的不是object時,那麼就返回函數內部初始化的。prototype
function中有prototype狀況3d
function Person() { this.name="hongda"; this.age=28; return "fffff"; } Person.prototype={ school:"nanjing", say:function(){} } var p = new Person(); console.dir(p); console.log(typeof p); var pp=Person(); console.log(pp); console.log(typeof pp);
function Person() { this.name="hongda"; this.age=28; return new String("ffffff"); } Person.prototype={ school:"nanjing", say:function(){} } var p = new Person(); console.dir(p); console.log(typeof p); var pp=Person(); console.log(pp); console.log(typeof pp);
能夠發現若是初始化返回的就是return返回的對象時,該初始化對象並不能獲取prototypecode
反之就能夠獲取prototype.對象
特殊狀況: blog
Function:io
function Fun(){ this.a="a"; this.b="b"; } function Person() { this.name="hongda"; this.age=28; return Fun; } Person.prototype={ school:"nanjing", say:function(){} } var p = new Person(); console.dir(p); console.log(p.toString()); console.log(typeof p); var pp=Person(); console.log(pp); console.log(typeof pp);
function Person() { this.name="hongda"; this.age=28; return new Function("var a='a';var b='b';"); } Person.prototype={ school:"nanjing", say:function(){} } var p = new Person(); console.dir(p); console.log(p.toString()); console.log(typeof p); var pp=Person(); console.log(pp); console.log(typeof pp);
Date:console
function Person() { this.name="hongda"; this.age=28; return new Date(22222222222222); } Person.prototype={ school:"nanjing", say:function(){} } var p = new Person(); console.dir(p); console.log(p.toString()); console.log(typeof p); var pp=Person(); console.log(pp); console.log(typeof pp);
Object:
function Fun(){ this.a="a"; this.b="b"; } function Person() { this.name="hongda"; this.age=28; return new Fun(); } Person.prototype={ school:"nanjing", say:function(){} } var p = new Person(); console.dir(p); console.log(p.toString()); console.log(typeof p); var pp=Person(); console.log(pp); console.log(typeof pp);
Boolean:
function Person() { this.name="hongda"; this.age=28; return true; } Person.prototype={ school:"nanjing", say:function(){} } var p = new Person(); console.dir(p); console.log(p.toString()); console.log(typeof p); var pp=Person(); console.log(pp); console.log(typeof pp);
function Person() { this.name="hongda"; this.age=28; return new Boolean(true); } Person.prototype={ school:"nanjing", say:function(){} } var p = new Person(); console.dir(p); console.log(p.toString()); console.log(typeof p); var pp=Person(); console.log(pp); console.log(typeof pp);
Array:
var arr=new Array(5); for(var i=0;i<5;i++){ arr[i]=i; } function Person() { this.name="hongda"; this.age=28; return arr; } Person.prototype={ school:"nanjing", say:function(){} } var p = new Person(); console.dir(p); console.log(p.toString()); console.log(typeof p); var pp=Person(); console.log(pp); console.log(typeof pp);
function Person() { this.name="hongda"; this.age=28; return [1,2,3,4,5]; } Person.prototype={ school:"nanjing", say:function(){} } var p = new Person(); console.dir(p); console.log(p.toString()); console.log(typeof p); var pp=Person(); console.log(pp); console.log(typeof pp);
還有一些特殊的狀況
var arr=new Array(5); for(var i=0;i<5;i++){ arr[i]=i; } console.log(typeof arr); var list=[1,2,3,4,5]; console.log(typeof list); var re = new RegExp("d(b+)(d)","ig"); console.log(typeof re); var reg=/a\w+/g; console.log(typeof reg);
所有都是object
var fun=function(){} console.log(typeof fun); var fun2=new Function("var a='hong';var b=24;"); console.log(fun2); console.log(typeof fun2);
結論:返回的是Object類型或者function類型的,那麼就返回return返回的,反之則返回實例化對象,一樣適用於Boolean.