高級面向對象之 包裝對象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>包裝對象</title>
	</head>
	<body>
		<script>
			前言:
			1.首先我們先來了解一下javascript的數據類型 
				a:5個基本數據類型:
					<1>:String 類型:String類型用於表示由零個或多個16位Unicode字符串組成的字符序列,既字符串
					<2>:Number 類型:可取值 浮點數,整數,NaN(not a number)
					<3>:Boolean類型:取值只有 true 和false
					<4>:Undefined類型:undefined類型只有一個值,既特殊的undefined,在使用var聲明一個變量但未對其
						初始化時,這個變量的值就是undefined
					<5>:Null類型:Null類型只有一個值,這個特殊的值爲null,null表示一個空對象指針,這也正是使用typeof
						操作符檢測null值時會返回'object'的原因
				b:引用類型Object
					<1>:Object類型:ECMAScript中的對象其實就是一組數據和功能的集合.對象可以通過執行new操作符後跟
						要創建的對象的名稱來創建,而創建object類型的實例併爲其添加屬性和方法,就可以創建自定義對象.
						如:
						 var o = new Object();
						每個object實例都擁有下列屬性和方法:
						1.constructor: 保存着用於創建當前對象的函數,對於var o = new Object(),構造函數就是object();
						2.hasOwnProperty(propertyName):用於檢查給定的屬性在當前的實例中(而不是在實例的原型中)是否存在
						3.isPrototypeOf(object):用於檢查傳入的對象是否是當前對象的原型
						4.propertyIsEnumerable(propertyName):用於檢查給定的屬性是否能夠使用for-in 語句
						5.toLocaleString():返回對象的字符串表示,該字符串與執行環境的地區對應
						6.toString():返回對象的字符串表示
						7.valueOf():返回對象的字符串,數值,或布爾表示.通常與toString()方法的返回值相同
						
						ps:由於在ECMAScript中object是所有對象的基礎,因此所有對象都具有這些基本的屬性和方法
						   (既object所具有的所有屬性和方法,也同樣存在於更具體的對象中.如Math,Function等)
			2.正題
			看一個例子:
			var str = 'hello';
			alert(typeof str);
			str.charAt(0);  // 獲取第一個字符 爲 h
			例子中我們聲明瞭一個值爲hello的字符串,然後通過 typeof操作符檢測它的類型 發現爲 string ,表示str 爲基本類型中
			的string類型,既然str爲基本類型(而不是對象),怎麼能夠調用方法獲得第一個字符呢?
			原因是 對於 String,Number,Boolean這三種基本數據類型他們有自己的包裝對象,分別爲String,Number,Boolean
			那我們通過基本對象調用方法的時候的過程是什麼呢?
			
			如 str.indexOf(0) :基本類型會找到對應的包裝對象類型,然後包裝對象把所有的屬性和方法給了基本類型,
							  然後包裝對象消失
			
			對於基本數據類型我們是不能給其添加屬性和方法的,但是我們又想使用某些方法或者屬性該怎麼辦呢?
			我們可以把相應的方法或屬性添加到包裝對象的原型上,這樣我們基本類型就可以使用擴展屬性和方法了
			
			如:
			 String.prototype.lastValue(){
			 	return this.charAt(this.length-1);
			 }
			 
			 str.lastValue();//這樣str就可以調用了
			
		</script>
	</body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章