Maison  >  Article  >  interface Web  >  Le javascript est-il orienté objet ?

Le javascript est-il orienté objet ?

青灯夜游
青灯夜游original
2021-06-30 17:34:545550parcourir

Javascript n'est pas un langage strictement orienté objet, mais un langage de script côté client basé sur une programmation orientée objet et événementielle. Raison : l'orientation objet comprend trois fonctionnalités principales : l'encapsulation, l'héritage et le polymorphisme ; tandis que JavaScript n'a que l'encapsulation et l'héritage simule uniquement l'héritage, pas l'orientation objet.

Le javascript est-il orienté objet ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, JavaScript version 1.8.5, ordinateur Dell G3.

Javascript n'est pas un langage orienté objet au sens strict, mais un langage de script côté client basé sur une programmation pilotée par les objets et les événements ; il peut non seulement créer des objets, mais également utiliser des objets existants.

Pourquoi JavaScript n'est-il pas un langage orienté objet ?

Parce que l'orienté objet comprend trois caractéristiques majeures : l'encapsulation, l'héritage et le polymorphisme. Il n'y a que l'encapsulation en JavaScript, et l'héritage n'est qu'un héritage simulé, non orienté objet.

Tout compte fait, en JavaScript, tout est un objet, les propriétés, les tableaux, les fonctions, etc. sont tous des objets.

Il n'y a pas de surcharge en JavaScript

Le javascript est-il orienté objet ?

Il n'y a pas de surcharge en JavaScript Fonctions avec les mêmes. Le nom défini ultérieurement écrasera les fonctions précédentes et n'appellera toujours que la dernière. De plus, les paramètres formels dans JS ne sont que des espaces réservés si deux paramètres formels sont définis, un seul paramètre peut être transmis, juste pour faciliter les paramètres réels transmis par le. programmeur.

Lorsque les paramètres formels ne sont pas écrits, les paramètres réels ne peuvent pas être facilement utilisés comme espaces réservés. Dans ce cas, le paramètre formel implicite arguments[0] est utilisé pour accéder au premier paramètre réel, et arguments[1] l'est. utilisé pour accéder au deuxième paramètre réel, etc.

Utiliser des fonctions pour simuler des classes

Généralement, la première lettre du nom d'une classe est en majuscule 1. Il y a un constructeur quand. définir la classe, 2. Méthodes La valeur d'attribut de est une fonction.

Exemple :

<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>

Utiliser la classe Object pour créer des objets instantanés

delete stu.name;//可以删除属性

Exemple :

<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>

Simulation Héritage

1. Utilisez la fonction call() pour simuler l'héritage

<!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. Utilisez la fonction apply() pour simuler l'héritage

<!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. Utiliser Le prototype de prototype simule l'héritage

<!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>

Grâce à l'attribut prototype d'une classe, vous pouvez connaître les attributs et les méthodes de la classe.

//1.创建父类对象 
var person = new Person(); 
//2.子类.prototype = 父类对象 
Student.prototype = person ; 
//把父类的原型赋值给子类对象的原型,原型一致,模拟实现了继承。

[Recommandations associées : Tutoriel d'apprentissage Javascript]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn