Maison interface Web js tutoriel JS面向对象编程之对象使用分析_javascript技巧

JS面向对象编程之对象使用分析_javascript技巧

May 16, 2016 pm 06:21 PM
面向对象

因为大家总是用面向过程的编程思想来写JS代码,而且也由于网络上充斥了太多小“巧”的JS代码段,很多都是随意而为,很不规范,这也就造成了大家对JS的“误解”,一味的认为它就是一个辅助的小东东,而不适合做大的东西开发。但是自从AJAX兴起后,大量的JS代码编写要求人们具备像写JAVA类似的代码一样,能够面向对象进行开发。

所以下面就结合我自己的体会和所学习的东东和大家一起来学习在JS中如何使用面向对象的编程。其实使用JS进行面向对象开发也不是很难的事情,因为在JS中每一个function就是一个对象,比如如下一个函数:

复制代码 代码如下:

function HelloWorld()
{
alert('hello world!');
}

那么我们在使用的时候就可以把它当成一个对象来使用,比如使用如下的测试函数:
复制代码 代码如下:

function _test()
{
var obj = new HelloWorld();
}

那么在调用_test方法后就会弹出hello world!的提示框,也就是调用了HelloWorld()对象(函数)。在这里HelloWorld这个对象没有任何属性和方法,它只有一个构造方法HelloWorld(),我们可以把它想象成JAVA中的一个没有任何属性和方法的类,当使用new进行对象创建的时候,就调用了它的构造方法。这也是我们最简单的对象了,当然了,一个对象肯定是要赋予它属性和方法的,在JS中我们使用prototype原型关键字进行赋值,比如我要给HelloWorld对象增加一个sayHello方法和一个name属性,那么就可以这样添加:
复制代码 代码如下:

HelloWorld.prototype = {
name : 'JavaScript',
sayHello : function() {
alert(this.name);
}
}

那么就可以为HelloWorld添加了一个name属性和sayHello方法,我们再改一下_test方法,如下:
复制代码 代码如下:

function _test()
{
var obj = new HelloWorld();
obj.sayHello();
}

那么调用_test方法后就会先后打印hello wordl!和JavaScript(一个是构造方法中的alert,一个是sayHello方法中的alert)。注意sayHello方法中的alert引用了this关键字,该关键字表示的就是HelloWorld对象,即默认指向该对象,和JAVA中的this关键字一样。

对于向一个对象添加实例方法和属性,我们可以采用上述的方式,即使用prototype关键字进行赋值,格式如下:

对象名称.prototype = {
属性一 : 属性值,
属性二 : 属性值,
方法一 : function(参数列表) {
方法体;
},
方法二 : function(参数列表) {
方法体;
}
}

可以按照如上方式对一个对象进行多个属性和方法的定义,这样在new一个对象后,就可以使用实例名称.属性或方法来获取属性或执行方法了。

在上面的方法中,大家不知道发现没有对象的属性是可以直接访问的,比如访问HelloWorld对象的name属性就可以使用obj.name直接获取。这就好比我们JAVA中的公有属性了,而且我们还可以直接对name属性进行赋值操作。所以现在有一个问题了,我们如何给一个对象赋一个私有成员变量呢?那我们就可能要改一下HelloWorld类的声明方式了,不使用prototype进行类的属性和方法声明,而是直接使用内嵌函数和属性进行声明,修改的HelloWorld如下,我们命名为HelloWorld2:
复制代码 代码如下:

function HelloWorld2()
{
var privateProp = 'hello world 2!';
this.method = function() {
alert(privateProp);
}
}

看到HelloWorld2的类申明方式了没?是直接在函数内部进行了函数嵌套申明,而且我们还设置了一个局部变量privateProp,即我们的私有成员变量,该变量只能被HelloWorld2内部的函数进行访问,外部访问是不允许的,这样我们就可以通过使用变量的作用域来巧妙的设置类的私有变量了。我们应用如下:
复制代码 代码如下:

function _test2()
{
var obj2 = new HelloWorld2();
obj2.method(); // 调用该方法将打印'hello world 2!
alert(obj2.privateProp); // 将打印undefined
}

上面所说的都是如何定义一个类,以为如何为一个类定义属性和方法,由于采用prototype方式进行定义清晰明了,所以一般都是使用该方式进行类的定义,而且现在很多AJAX框架中都使用了类似的类声明方式。而且类的私有成员变量却只能在类的构造方式中的函数进行访问,这样类的prototype声明的方法就不能访问该私有成员变量了,而且可读性方面也没有prototype方式好。

好了,上面所说的都是定义一个类的实例方法和属性。在JAVA中类有实例方法和属性与类方法和属性之分。所谓类属性和方法就是该类的所有实例都只维护一份类属性和类方法的副本,而不是每个实例都维护一套,这和实例属性和实例方法是不一样的。那么在JS中如何为一个类定义静态类方法和类属性呢?我们可以直接为类添加静态属性和静态方法,比如为HelloWorld类添加一个age的静态属性和一个hello的静态方法,那么声明如下:
复制代码 代码如下:

HelloWorld.age = 22;
HelloWorld.hello = function() {
alert(HelloWorld.age);
}

那么这样就为类HelloWorld声明了静态属性age和静态方法hello了。在使用的时候就直接使用类名进行访问了,但是不能使用实例进行访问,这点与JAVA中的是一致的,测试如下:
复制代码 代码如下:

function _test()
{
var obj = new HelloWorld();
obj.sayHello(); // 正确,实例方法,可以通过实例进行访问
HelloWorld.hello(); // 正确,静态方法,通过类名进行直接访问
obj.hello(); // 错误,不能通过实例访问静态方法。会报JS错误!
}

通过以上的说明,相信大家对JS进行面向对象编程有了一定的了解,而且也一定蠢蠢欲动了吧,呵呵,大家不妨试试哦~~(注:以上代码全部通过测试!)
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment implémenter une programmation événementielle orientée objet à l'aide du langage Go Comment implémenter une programmation événementielle orientée objet à l'aide du langage Go Jul 20, 2023 pm 10:36 PM

Comment utiliser le langage Go pour implémenter une programmation événementielle orientée objet Introduction : Le paradigme de programmation orientée objet est largement utilisé dans le développement de logiciels, et la programmation événementielle est un modèle de programmation courant qui réalise le flux du programme à travers le déclenchement et le traitement de contrôle des événements. Cet article présentera comment implémenter une programmation événementielle orientée objet à l'aide du langage Go et fournira des exemples de code. 1. Le concept de programmation événementielle La programmation événementielle est un modèle de programmation basé sur des événements et des messages, qui transfère le contrôle du flux du programme au déclenchement et au traitement des événements. en mode événementiel

Quelle est l'importance de l'annotation @JsonIdentityInfo utilisant Jackson en Java ? Quelle est l'importance de l'annotation @JsonIdentityInfo utilisant Jackson en Java ? Sep 23, 2023 am 09:37 AM

L'annotation @JsonIdentityInfo est utilisée lorsqu'un objet a une relation parent-enfant dans la bibliothèque Jackson. L'annotation @JsonIdentityInfo est utilisée pour indiquer l'identité de l'objet lors de la sérialisation et de la désérialisation. ObjectIdGenerators.PropertyGenerator est une classe d'espace réservé abstraite utilisée pour représenter les situations dans lesquelles l'identifiant d'objet à utiliser provient d'une propriété POJO. Syntaxe@Target(value={ANNOTATION_TYPE,TYPE,FIELD,METHOD,PARAMETER})@Retention(value=RUNTIME)public

Explorez la programmation orientée objet dans Go Explorez la programmation orientée objet dans Go Apr 04, 2024 am 10:39 AM

Le langage Go prend en charge la programmation orientée objet via la définition de type et l'association de méthodes. Il ne prend pas en charge l'héritage traditionnel, mais est mis en œuvre par composition. Les interfaces assurent la cohérence entre les types et permettent de définir des méthodes abstraites. Des cas pratiques montrent comment utiliser la POO pour gérer les informations client, notamment la création, l'obtention, la mise à jour et la suppression d'opérations client.

Analyse du modèle Flyweight dans la programmation orientée objet PHP Analyse du modèle Flyweight dans la programmation orientée objet PHP Aug 14, 2023 pm 05:25 PM

Analyse du modèle Flyweight dans la programmation orientée objet PHP Dans la programmation orientée objet, le modèle de conception est une méthode de conception logicielle couramment utilisée, qui peut améliorer la lisibilité, la maintenabilité et l'évolutivité du code. Le modèle Flyweight est l’un des modèles de conception qui réduit la surcharge de mémoire en partageant des objets. Cet article explique comment utiliser le mode poids mouche en PHP pour améliorer les performances du programme. Qu’est-ce que le mode poids mouche ? Le modèle de poids mouche est un modèle de conception structurelle dont le but est de partager le même objet entre différents objets.

Fonctionnalités avancées PHP : meilleures pratiques en matière de programmation orientée objet Fonctionnalités avancées PHP : meilleures pratiques en matière de programmation orientée objet Jun 05, 2024 pm 09:39 PM

Les meilleures pratiques de POO en PHP incluent les conventions de dénomination, les interfaces et les classes abstraites, l'héritage et le polymorphisme, ainsi que l'injection de dépendances. Les cas pratiques incluent : l'utilisation du mode entrepôt pour gérer les données et l'utilisation du mode stratégie pour mettre en œuvre le tri.

Analyse des fonctionnalités orientées objet du langage Go Analyse des fonctionnalités orientées objet du langage Go Apr 04, 2024 am 11:18 AM

Le langage Go prend en charge la programmation orientée objet, définissant des objets via des structures, définissant des méthodes à l'aide de récepteurs de pointeurs et implémentant le polymorphisme via des interfaces. Les fonctionnalités orientées objet assurent la réutilisation, la maintenabilité et l'encapsulation du code dans le langage Go, mais il existe également des limitations telles que le manque de concepts traditionnels de classes et d'héritage et de conversions de signatures de méthodes.

Existe-t-il des fonctionnalités orientées objet de type classe dans Golang ? Existe-t-il des fonctionnalités orientées objet de type classe dans Golang ? Mar 19, 2024 pm 02:51 PM

Il n'y a pas de concept de classe au sens traditionnel dans Golang (langage Go), mais il fournit un type de données appelé structure, à travers lequel des fonctionnalités orientées objet similaires aux classes peuvent être obtenues. Dans cet article, nous expliquerons comment utiliser les structures pour implémenter des fonctionnalités orientées objet et fournirons des exemples de code concrets. Définition et utilisation des structures Examinons d'abord la définition et l'utilisation des structures. Dans Golang, les structures peuvent être définies via le mot-clé type, puis utilisées si nécessaire. Les structures peuvent contenir des attributs

Compréhension approfondie de la programmation orientée objet PHP : techniques de débogage pour la programmation orientée objet Compréhension approfondie de la programmation orientée objet PHP : techniques de débogage pour la programmation orientée objet Jun 05, 2024 pm 08:50 PM

En maîtrisant le suivi de l'état des objets, la définition de points d'arrêt, le suivi des exceptions et l'utilisation de l'extension xdebug, vous pouvez déboguer efficacement le code de programmation orienté objet PHP. 1. Suivez l'état de l'objet : utilisez var_dump() et print_r() pour afficher les attributs de l'objet et les valeurs des méthodes. 2. Définir un point d'arrêt : définissez un point d'arrêt dans l'environnement de développement et le débogueur se mettra en pause lorsque l'exécution atteint le point d'arrêt, ce qui facilitera la vérification de l'état de l'objet. 3. Tracez les exceptions : utilisez les blocs try-catch et getTraceAsString() pour obtenir la trace de la pile et le message lorsque l'exception se produit. 4. Utilisez le débogueur : La fonction xdebug_var_dump() peut inspecter le contenu des variables pendant l'exécution du code.

See all articles