1. 程式人生 > >JS中new操作符與函式返回值return

JS中new操作符與函式返回值return

預設情況



       預設情況下函式的返回值為undefined(即沒有顯示地定義返回值的話),但是建構函式比較例外,new建構函式在沒有return的情況下預設返回新建立的物件。但是在有顯示返回值的情況下,如果返回值為基本資料型別的話(stringnumberbooleanundefinednull),返回值仍然為新建立的物件,這一點比較奇怪,需要注意。只有在顯示返回一個非基本資料型別的物件的時候,函式的返回值才為指定的物件。在這種情況下,this值所引用的物件就被丟棄了。

//如果指定的返回值是基本資料型別的話,仍然會返回新物件例項。
function A(){
this.x=3;
return "OK";
}
var a = new A();
a instanceof A === true;
"x" in a === true

//如果指定返回物件了的話,被返回的物件就成了指定的物件值。在這種情況下,this值所引用的物件就被丟棄了。

function B(){this.x=3;return Object("OK");}var b = new B();"x" in b === falseb instanceof B === falseb instanceof String === true

更直觀的例子:

function User( name, age){

this.name = name;
this.age = age;


// return; //
 返回 this
// return null; //
 返回 this
// return this;
// return []; //

 返回 []
// return function(){}; //
 返回 這個 function,拋棄 this
// return false; //
 返回 this
// return new Boolean( false); //
 返回新 boolean;拋棄 this
// return 'hello world'; //
 返回 this
// return new String( 'hello world'); //
 返回 新建的 string,拋棄 this
// return 2; //
 返回 this
// return new Number( 32); //
 返回新的 number,拋棄 this
}

即返回值為簡單的基本資料型別,而不是一個顯示的物件(包括基本型別的物件)的話,那麼返回值仍然為新建立的物件。

       預設情況下函式的返回值為undefined(即沒有顯示地定義返回值的話),但是建構函式比較例外,new建構函式在沒有return的情況下預設返回新建立的物件。但是在有顯示返回值的情況下,如果返回值為基本資料型別的話(stringnumberbooleanundefinednull),返回值仍然為新建立的物件,這一點比較奇怪,需要注意。只有在顯示返回一個非基本資料型別的物件的時候,函式的返回值才為指定的物件。在這種情況下,this值所引用的物件就被丟棄了。

//如果指定的返回值是基本資料型別的話,仍然會返回新物件例項。
function A(){
this.x=3;
return "OK";
}
var a = new A();
a instanceof A === true;
"x" in a === true

//如果指定返回物件了的話,被返回的物件就成了指定的物件值。在這種情況下,this值所引用的物件就被丟棄了。

function B(){this.x=3;return Object("OK");}var b = new B();"x" in b === falseb instanceof B === falseb instanceof String === true

更直觀的例子:

function User( name, age){

this.name = name;
this.age = age;


// return; //
 返回 this
// return null; //
 返回 this
// return this;
// return []; //
 返回 []
// return function(){}; //
 返回 這個 function,拋棄 this
// return false; //
 返回 this
// return new Boolean( false); //
 返回新 boolean;拋棄 this
// return 'hello world'; //
 返回 this
// return new String( 'hello world'); //
 返回 新建的 string,拋棄 this
// return 2; //
 返回 this
// return new Number( 32); //
 返回新的 number,拋棄 this
}

即返回值為簡單的基本資料型別,而不是一個顯示的物件(包括基本型別的物件)的話,那麼返回值仍然為新建立的物件。