javascript——面向對象
內容介紹- js面向(基於)對象編程—類(原型對象)與對象(實例)
- js面向(基於)對象編程—構造方法和this
無論你是學習java,還是php或者c#都要對javascript要有深入的瞭解,現在的網頁只要有動態效果就要用到javascript,javascript是必學內容,重點是學習javascript的面向對象編程。
學習目標:
- 初步掌握js中的類(原形對象)和對象
- 什麼是成員變量和成員方法
- 掌握構造方法的使用
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 [支持面向對象]
彙編語言 [面向機器]
c語言 [面向過程]
java語言 [面向對象]
js [支持面向對象]
類(原型對象)和對象(實例)的區別和聯繫
- 類(原型對象)是抽象的,概念的,代表一類事物,比如人,貓...
- 對象是具體的,實際的,代表一個具體事物
- 類(原型對象)是對象實例的模版,對象實例是類的一個個體
類(原型對象)—如何自定義類(原型對象)和對象
- 工廠方法—使用new Object創建對象並添加相關屬性
- 使用構造函數來定義類(原型對象)
- 使用prototype
- 構造函數及原型混合方式
- 動態原型方式
先講第二種方法:使用構造函數來定義類(原型對象)
基本語法:
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>