javascript並不是嚴格意義的物件導向語言,而是一種基於物件、事件驅動程式設計的客戶端腳本語言。原因:物件導向包含三大特徵:封裝、繼承、多型;而JavaScript中只有封裝,繼承也只是模擬繼承,談不上物件導向。
本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。
javascript並不是嚴格意義的物件導向語言,而是一種基於物件、事件驅動程式設計的客戶端腳本語言;它不僅可以創建對象,也能使用現有的物件。
為什麼JavaScript不是物件導向的語言?
因為物件導向包含三大特徵:封裝、繼承、多態。 JavaScript中只有封裝,繼承只是模擬繼承,談不上物件導向。
所有說,在JavaScript中,一切都是對象,屬性、陣列、函數等等都是對象。
JavaScript中沒有重載
#JavaScript中沒有重載,後面定義的同名函數會把前面的函數覆掉,永遠只呼叫最後一個,而JS中的形參只是佔位符,定義兩個形參,可以只傳一個參數,只是為了方便程式設計師傳來的實參。
不寫形參時,實參不能方便使用佔位符,這時使用隱式形參arguments[0]來訪問第一個實參,arguments[1]訪問第二個實參等等。
使用函數模擬類別
一般類別的名稱首字母大寫,1.定義類別時同時有了建構函數,2.方法的屬性值是函數。
範例:
<script type="text/javascript"> function Student (sno,sname,age) { this.sno = sno; this.sname = sname; this.age = age; this.study = function(){ alert('我是'+this.sname+',我在学习') } } var stu = new Student(1,'xiaoming',20); stu.study(); </script>
使用Object類別建立即時物件
delete stu.name;//可以删除属性
範例:
<script type="text/javascript"> var stu = new Object(); stu.sno = 1; stu.sname = 'xiaoming'; stu.age = 20; stu.study = function(){ alert('我是'+this.sname+',我在学习'); } stu.study(); </script>
##模擬繼承
1、使用call()函數來模擬繼承<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> function Person (name,age) { this.name = name; this.age = age; this.eat = function(){ alert('姓名:'+this.name+",年龄:"+this.age+",我在吃饭"); } } function Student(sno,name,age){ Person.call(this,name,age);//相当于super(name,age) this.sno = sno; this.study = function(){ alert('学号:'+this.sno+',姓名:'+this.name+",年龄"+this.age+",我在学习"); } } var stu = new Student(1,'xiaoming',22); stu.eat(); stu.study(); </script> </head> <body> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> function Person (name,age) { this.name = name; this.age = age; this.eat = function(){ alert('姓名:'+this.name+",年龄:"+this.age+",我在吃饭"); } } function Student(sno,name,age){ Person.apply(this,[name,age]);//相当于super(name,age) this.sno = sno; this.study = function(){ alert('学号:'+this.sno+',姓名:'+this.name+",年龄"+this.age+",我在学习"); } } var stu = new Student(1,'xiaoming',22); stu.eat(); stu.study(); </script> </head> <body> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> function Person (name,age) { this.name = name; this.age = age; this.eat = function(){ alert('姓名:'+this.name+",年龄:"+this.age+",我在吃饭"); } } function Student(sno,name,age){ this.sno = sno; this.name = name; this.age = age; this.study = function(){ alert('学号:'+this.sno+',姓名:'+this.name+",年龄"+this.age+",我在学习"); } } //1.创建父类对象 var person = new Person(); //2.子类.prototype = person; Student.prototype = person; //把父类的原型赋值给子类的原型,原型一致,模拟实现了继承。 //但是会丢失子类的属性值,全变成了undefined,即使new 对象时加上了,也不起作用 //打脸,xiaoming既吃饭也学习 var stu = new Student(1,'xiaoming',20); //动态的添加方法,即使在new对象之前没有这个方法 Student.prototype.test = function() { alert('test动态添加方法'); } stu.eat(); stu.study(); stu.test(); </script> </head> <body> </body> </html>
//1.创建父类对象 var person = new Person(); //2.子类.prototype = 父类对象 Student.prototype = person ; //把父类的原型赋值给子类对象的原型,原型一致,模拟实现了继承。
以上是javascript是物件導向嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!