韓順平 javascript教學視頻_學習筆記12_js面向對象編程介紹_類(原型對象)和對象

javascript——面向對象

內容介紹
  1. js面向(基於)對象編程—類(原型對象)與對象(實例)
  2. js面向(基於)對象編程—構造方法和this

無論你是學習java,還是php或者c#都要對javascript要有深入的瞭解,現在的網頁只要有動態效果就要用到javascript,javascript是必學內容,重點是學習javascript的面向對象編程。

學習目標:
  1. 初步掌握js中的類(原形對象)和對象
  2. 什麼是成員變量和成員方法
  3. 掌握構造方法的使用

js面向對象特徵介紹

javascript是一種面向(基於)對象的動態腳本語言,是一種基於對象(Object)和事件驅動(EventDriven)並具有安全性能的腳本語言。他具有面向對象語言所特有的各種特性,比如封裝、繼承及多態等。但對於大多數人說,我們只把javascript作爲一個函數式語言,只把他用於一 些簡單的前端數據輸入驗證及實現一些簡單的頁面動態效果等,我們沒能完全把握動態語言的各種特性。在很多優秀的Ajax框架中,比如EXtJs、 JQuery等,大量使用了javascript的面向對象特性,要使用好ext技術,javascript的高級特性,面嚮對象語言特性是我們必須完全把握的。

封裝:javascript只有私有和公有這兩個封裝方式
繼承:不是通過關鍵字extends,而是通過對象冒充的方式來達到繼承的效果
多態:javascript是天生的多態,它本身就無態,無態就是多態的一種體現。

在學習本章前,我們有必要給大家明確幾個概念,這樣大家在後續學習中才不會犯暈:
  • javascript是一種基於對象(object-based)的語言,你遇到的所有東西幾乎都是對象。

        特別說明:基於對象也好,面向對象也好實際上都是一對象的概念來編寫程序,從本質上並無區別,所以這兩個概念在我們的課程中是一樣的。
  • 因爲javascript中是沒有class(類),它換了個名稱,稱爲原型對象,這兩個概念從在編程中發揮的作用看都是一個意思,爲了統一叫法,我們這裏就統一叫類。

澄清概念
在 js 中基於對象 == js 面向對象
在 js 中沒有類class,但是它取了一個新的名字叫 原型對象,因此 類==原型對象

js面向(基於)對象編程——類(原型匹配)與對象


js面向(基於)對象
計算機語言的發展是向接近人的思維方式演變的,這是一個大趨勢。
js引入了面向對象的思想,js不是純面向對象的,我們可以認爲它是基於面向對象的。

彙編語言  [面向機器]
c語言        [面向過程]
java語言   [面向對象]
js              [支持面向對象]

類(原型對象)和對象(實例)的區別和聯繫

  1. 類(原型對象)是抽象的,概念的,代表一類事物,比如人,貓...
  2. 對象是具體的,實際的,代表一個具體事物
  3. 類(原型對象)是對象實例的模版,對象實例是類的一個個體

類(原型對象)—如何自定義類(原型對象)和對象

  1. 工廠方法—使用new Object創建對象並添加相關屬性
  2. 使用構造函數來定義類(原型對象)
  3. 使用prototype
  4. 構造函數及原型混合方式
  5. 動態原型方式

先講第二種方法:
使用構造函數來定義類(原型對象)

基本語法:
function 類名/原型對象名(){}

創建對象:
var 對象名=new 類名();

對象—特別說明
  • 在js中一切都是對象
<html>  
	<head>  
		<script language="javascript">  
		
			    function Person(){  
				}  
				var a=new Person();  
				window.alert(a.constructor);//a對象實例的構造函數  
				window.alert(typeof a);//a的類型是什麼  
				var b=123;  
				window.alert(b.constructor);//b對象實例的構造函數  
				window.alert(typeof b);//b的類型是什麼  
				var c="123";  
				window.alert(c.constructor);//c對象實例的構造函數  
				window.alert(typeof c);//c的類型是什麼   
				  
				//Person也是對象  再次說明了js中一切都是對象
				window.alert(Person.constructor); 
				  
				//思考:如何判斷一個對象實例是不是Person類型?  
				if(a instanceof Person){   
					//如果這個實例是Person這種類型,會返回一個真,否則返回假  
					window.alert("a是person");  
				}  
				  
				//或者  
				if(a.constructor==Person){  
					//a對象實例的構造函數就是Person  
					window.alert("a是Person");  
				}  
			
		</script>  
	</head>  
	<body></body>  
</html>  

下面看一個對象的例子:

<html>  
	<head>  
		<script language="javascript">  
			
			//js中沒有class,怎麼定義原型對象或者類呢,用function  
  
			//這裏就是定義一個Cat類。是一個類還是函數,主要看你怎麼去用它  
			function Cat(){  
			}  
  
			//如果你這樣用,很神奇,主要看你怎樣用  
			// Cat();//就是函數  
			// var cat1=new Cat();//這就是類  
			//這時Cat1就是一個對象(實例)  
			//屬性怎麼給,javascript比較鬆散,可以動態的添加屬性  
  
			var cat1=new Cat();  
  
			cat1.name="小白";  
			cat1.age=3;  
			cat1.color="白色";  
			
			//從上面的代碼我們可以看出  
			//1.js中的對象的屬性可以動態的添加  
			//2.屬性沒有限制  
  
			window.alert(cat1.name); //打印輸出小白  
			
			//沒有定義的會報undefined  
			window.alert(cat1.hobby);  
		</script>  
	</head>  
	<body></body>  
</html>  

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