javascript是物件導向嗎

青灯夜游
發布: 2021-10-19 11:29:28
原創
5553 人瀏覽過

javascript並不是嚴格意義的物件導向語言,而是一種基於物件、事件驅動程式設計的客戶端腳本語言。原因:物件導向包含三大特徵:封裝、繼承、多型;而JavaScript中只有封裝,繼承也只是模擬繼承,談不上物件導向。

javascript是物件導向嗎

本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

javascript並不是嚴格意義的物件導向語言,而是一種基於物件、事件驅動程式設計的客戶端腳本語言;它不僅可以創建對象,也能使用現有的物件。

為什麼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(&#39;我是&#39;+this.sname+&#39;,我在学习&#39;)
                }
            }
            var stu = new Student(1,&#39;xiaoming&#39;,20);
            stu.study();
</script>
登入後複製

使用Object類別建立即時物件

delete stu.name;//可以删除属性
登入後複製

範例:

<script type="text/javascript">
            var stu = new Object();
            stu.sno = 1;
            stu.sname = &#39;xiaoming&#39;;
            stu.age = 20;
            stu.study = function(){
                alert(&#39;我是&#39;+this.sname+&#39;,我在学习&#39;);
            }
            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(&#39;姓名:&#39;+this.name+",年龄:"+this.age+",我在吃饭");
                }
            }
            function Student(sno,name,age){
                Person.call(this,name,age);//相当于super(name,age)
                this.sno = sno;
                this.study = function(){
                    alert(&#39;学号:&#39;+this.sno+&#39;,姓名:&#39;+this.name+",年龄"+this.age+",我在学习");
                }
            }
            var stu = new Student(1,&#39;xiaoming&#39;,22);
            stu.eat();
            stu.study();
        </script>
    </head>
    <body>
    </body>
</html>
登入後複製

2、使用apply()函數來模擬繼承

<!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(&#39;姓名:&#39;+this.name+",年龄:"+this.age+",我在吃饭");
                }
            }
            function Student(sno,name,age){
                Person.apply(this,[name,age]);//相当于super(name,age)
                this.sno = sno;
                this.study = function(){
                    alert(&#39;学号:&#39;+this.sno+&#39;,姓名:&#39;+this.name+",年龄"+this.age+",我在学习");
                }
            }
            var stu = new Student(1,&#39;xiaoming&#39;,22);
            stu.eat();
            stu.study();
        </script>
    </head>
    <body>
    </body>
</html>
登入後複製

3、使用原型prototype模擬繼承

<!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(&#39;姓名:&#39;+this.name+",年龄:"+this.age+",我在吃饭");
                }
            }
            function Student(sno,name,age){
                this.sno = sno;
                this.name = name;
                this.age = age;
                this.study = function(){
                    alert(&#39;学号:&#39;+this.sno+&#39;,姓名:&#39;+this.name+",年龄"+this.age+",我在学习");
                }
            }
            //1.创建父类对象
            var person = new Person();
            //2.子类.prototype = person;
            Student.prototype = person;
            //把父类的原型赋值给子类的原型,原型一致,模拟实现了继承。
            //但是会丢失子类的属性值,全变成了undefined,即使new 对象时加上了,也不起作用
            //打脸,xiaoming既吃饭也学习
            var stu = new Student(1,&#39;xiaoming&#39;,20);
            //动态的添加方法,即使在new对象之前没有这个方法
            Student.prototype.test = function() {
                alert(&#39;test动态添加方法&#39;);
            }
            stu.eat();
            stu.study();
            stu.test();
        </script>
    </head>
    <body>
    </body>
</html>
登入後複製

透過類別的prototype屬性,可以得知該類別有那些屬性和方法。

//1.创建父类对象 
var person = new Person(); 
//2.子类.prototype = 父类对象 
Student.prototype = person ; 
//把父类的原型赋值给子类对象的原型,原型一致,模拟实现了继承。
登入後複製
【相關推薦:

javascript學習教學#

以上是javascript是物件導向嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板