溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

javascript是不是面向?qū)ο?/h1>
發(fā)布時(shí)間:2021-07-01 09:43:00 來源:億速云 閱讀:162 作者:chen 欄目:web開發(fā)

這篇文章主要講解了“javascript是不是面向?qū)ο蟆?,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“javascript是不是面向?qū)ο蟆卑桑?/p>

javascript并不是嚴(yán)格意義的面向?qū)ο笳Z言,而是一種基于對(duì)象、事件驅(qū)動(dòng)編程的客戶端腳本語言。原因:面向?qū)ο蟀ㄈ筇卣鳎悍庋b、繼承、多態(tài);而JavaScript中只有封裝,繼承也只是模擬繼承,談不上面向?qū)ο蟆?/p>

本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。

javascript并不是嚴(yán)格意義的面向?qū)ο笳Z言,而是一種基于對(duì)象、事件驅(qū)動(dòng)編程的客戶端腳本語言;它不僅可以創(chuàng)建對(duì)象,也能使用現(xiàn)有的對(duì)象。

為什么JavaScript不是面向?qū)ο蟮恼Z言?

因?yàn)槊嫦驅(qū)ο蟀ㄈ筇卣鳎悍庋b、繼承、多態(tài)。JavaScript中只有封裝,繼承也只是模擬繼承,談不上面向?qū)ο蟆?/p>

所有說,在JavaScript中,一切都是對(duì)象,屬性、數(shù)組、函數(shù)等等都是對(duì)象。

JavaScript中沒有重載

javascript是不是面向?qū)ο?></p><p>JavaScript中沒有重載,后面定義的同名函數(shù)會(huì)把前面的函數(shù)覆蓋掉,永遠(yuǎn)只調(diào)用最后一個(gè),而且JS中的形參只是占位符,定義兩個(gè)形參,可以只傳一個(gè)參數(shù),只是為了方便程序員傳來的實(shí)參。</p><p>不寫形參時(shí),實(shí)參不能方便使用占位符,這時(shí)使用隱式形參arguments[0]來訪問第一個(gè)實(shí)參,arguments[1]訪問第二個(gè)實(shí)參 等等。</p><p><strong>使用函數(shù)模擬類</strong></p><p>一般類的名稱首字母大寫,1.定義類時(shí)同時(shí)有了構(gòu)造函數(shù),2.方法的屬性值是函數(shù)。</p><p>示例:</p><pre class=<script type="text/javascript">             function Student (sno,sname,age) {                 this.sno = sno;                 this.sname = sname;                 this.age = age;                 this.study  = function(){                     alert('我是'+this.sname+',我在學(xué)習(xí)')                 }             }             var stu = new Student(1,'xiaoming',20);             stu.study(); </script>

使用Object類創(chuàng)建即時(shí)對(duì)象

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+',我在學(xué)習(xí)');
            }
            stu.study();
</script>

模擬繼承

1、使用call()函數(shù)來模擬繼承

<!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);//相當(dāng)于super(name,age)
                this.sno = sno;
                this.study = function(){
                    alert('學(xué)號(hào):'+this.sno+',姓名:'+this.name+",年齡"+this.age+",我在學(xué)習(xí)");
                }
            }
            var stu = new Student(1,'xiaoming',22);
            stu.eat();
            stu.study();
        </script>
    </head>
    <body>
    </body>
</html>

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

<!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]);//相當(dāng)于super(name,age)
                this.sno = sno;
                this.study = function(){
                    alert('學(xué)號(hào):'+this.sno+',姓名:'+this.name+",年齡"+this.age+",我在學(xué)習(xí)");
                }
            }
            var stu = new Student(1,'xiaoming',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('姓名:'+this.name+",年齡:"+this.age+",我在吃飯");
                }
            }
            function Student(sno,name,age){
                this.sno = sno;
                this.name = name;
                this.age = age;
                this.study = function(){
                    alert('學(xué)號(hào):'+this.sno+',姓名:'+this.name+",年齡"+this.age+",我在學(xué)習(xí)");
                }
            }
            //1.創(chuàng)建父類對(duì)象
            var person = new Person();
            //2.子類.prototype = person;
            Student.prototype = person;
            //把父類的原型賦值給子類的原型,原型一致,模擬實(shí)現(xiàn)了繼承。
            //但是會(huì)丟失子類的屬性值,全變成了undefined,即使new 對(duì)象時(shí)加上了,也不起作用
            //打臉,xiaoming既吃飯也學(xué)習(xí)
            var stu = new Student(1,'xiaoming',20);
            //動(dòng)態(tài)的添加方法,即使在new對(duì)象之前沒有這個(gè)方法
            Student.prototype.test = function() {
                alert('test動(dòng)態(tài)添加方法');
            }
            stu.eat();
            stu.study();
            stu.test();
        </script>
    </head>
    <body>
    </body>
</html>

通過類的prototype屬性,可以獲知該類有那些屬性和方法。

//1.創(chuàng)建父類對(duì)象 
var person = new Person(); 
//2.子類.prototype = 父類對(duì)象 
Student.prototype = person ; 
//把父類的原型賦值給子類對(duì)象的原型,原型一致,模擬實(shí)現(xiàn)了繼承。

感謝各位的閱讀,以上就是“javascript是不是面向?qū)ο蟆钡膬?nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)javascript是不是面向?qū)ο筮@一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI