Javascript中構造函數的返回值問題和new對象的過程


首先明確一點:javascript中構造函數是不需要有返回值的,這一點跟java很類似。可以認為構造函數和普通函數的最大差別就是:構造函數中沒有return語句,普通函數可以有return語句;構造函數中會使用this關鍵字定義成員變量和成員方法,普通的函數不會使用this關鍵字定義成員變量和方法。

function Person(name,sex)
{
this.name = name;
this.sex = sex;
// return 1;
//return true;
//return "aty";
return {"returnValue":11};
}

//new關鍵字會被認為是創建對象
var aObj = new Person("11",1);
console.log(aObj.returnValue); //11
console.log(aObj.name); //undefined

  

 function Person(name,sex) 
		{  
		        this.name = name;
			this.sex = sex;
  			 return 1;
    			//return true;
    			//return "aty";
    			//return {"returnValue":11};
		}
 
		//new關鍵字會被認為是創建對象
		var aObj = new Person("11",1);
		console.log(aObj.returnValue); //undefined
		console.log(aObj.name); //11

  

構造函數不需要顯示的返回值。使用new來創建對象(調用構造函數)時,如果return的是非對象(數字、字符串、布爾類型等)會忽而略返回值;如果return的是對象,則返回該對象。

下面簡單介紹下,javascript中new對象的過程:如var myObj = newPerson(“aty”,25);

1.創建一個空的Object對象.var obj = new Object();

2.將構造函數Person中this指向剛創建的obj對象

3.將創建的obj的__proto__指向構造函數Person的prototype。這一步是建立對象和原型直接的對應關系。firefox下通過

對象的__proto__屬性能夠訪問到原型,IE下則沒有暴露出相應的屬性。

4.執行構造函數Person()中的代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM