Maison > interface Web > Questions et réponses frontales > Le javascript est-il orienté objet ?

Le javascript est-il orienté objet ?

青灯夜游
Libérer: 2021-10-19 11:29:28
original
5587 Les gens l'ont consulté

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>
Copier après la connexion

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

delete stu.name;//可以删除属性
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

. 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>
Copier après la connexion

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 ; 
//把父类的原型赋值给子类对象的原型,原型一致,模拟实现了继承。
Copier après la connexion

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

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal