Maison >interface Web >js tutoriel >Explication détaillée des propriétés et méthodes publiques, privées et statiques des compétences js orientées objet_javascript

Explication détaillée des propriétés et méthodes publiques, privées et statiques des compétences js orientées objet_javascript

WBOY
WBOYoriginal
2016-05-16 16:03:271262parcourir

De nos jours, JavaScript est très populaire. Pour les développeurs de sites Web, JavaScript est un langage qui doit être maîtrisé. Cependant, avec la popularité et l'utilisation de frameworks tels que jquery, de nombreuses personnes n'ont pas une compréhension approfondie du JavaScript natif et sont habituées. à fonctionnel Le style d'édition est toujours flou concernant les fermetures et les prototypes. C'est une mauvaise utilisation de js orienté objet, et pour comprendre js orienté objet, vous devez d'abord comprendre ce que sont les méthodes publiques, les méthodes privilégiées et les méthodes statiques dans js

Méthode/étapes

1. Propriétés publiques et méthodes publiques

function User(name,age){
  this.name = name;//公有属性
  this.age = age;
}
User.prototype.getName = function(){//公有方法
  return this.name;
}
var user = new User('fire子海',26);
console.log(user.getName());//output:fire子海

2. Propriétés et méthodes privées

function User(name,age){
  var name = name;//私有属性
  var age = age;
  function alertAge(){//私有方法
     alert(age);
  }
  alertAge(age); //弹出26
}
var user = new User('fire子海',26);

3. Propriétés et méthodes statiques

En PHP, les méthodes qui peuvent être appelées sans instanciation sont appelées méthodes statiques. Il en va de même avec JS. Vous pouvez appeler les méthodes et propriétés de l'objet sans instanciation, c'est-à-dire en utilisant l'opérateur new pour matérialiser l'objet. .

function User(){}
User.age = 26;//静态属性
User.myname = 'fire子海';
User.getName =function(){//静态方法
 
  return this.myname;//如果这里使用this.name,返回的将是User,所有改用了myname,
}
console.log(User.getName());//output:fire子海

4. Méthodes privilégiées

function User(name,age){
  var name = name;//私有属性
  var age = age;
  this.getName = function(){ //特权方法
     return name;//私有属性和方法不能使用this调用
  }
}
var user = new User('fire子海',26);
console.log(user.getName());//output:fire子海

5. Classe statique

Pour les méthodes statiques et les attributs statiques, nous n'avons pas besoin de les créer comme dans la troisième étape. Si les internautes ont lu mon article "Comment créer un carrousel d'images en js", ils sauront qu'ils peuvent être créés en utilisant. littéraux.

var user = {
  init:function(name,age){
   this.name = name;
   this.age = age;
  },
  getName:function(){
   return this.name;
 }
}
user.init('fire子海',26);
console.log(user.getName());//output:fire子海

6. Règles d'appel pour les méthodes publiques

Pour appeler des méthodes publiques, il faut d'abord instancier l'objet

Dans les méthodes publiques, les propriétés publiques et les méthodes privilégiées sont appelées sans cela. Les méthodes et propriétés statiques ne peuvent pas être appelées en utilisant cela. Elles doivent être appelées via l'objet lui-même, c'est-à-dire le nom de l'objet. Les méthodes publiques ne peuvent pas appeler de méthodes privées

function User(){
  this.myname = 'fire子海';//公有属性
  this.age = 26;
  this.do = function(){//特权方法
    return this.myname+'学习js';
  }
}
User.eat = function(food){
 return '晚餐只有'+food;
}
User.prototype.alertAge = function(){
  alert(this.age);
}
User.prototype.alertDo = function(){
  alert(this.do());//调用特权方法
}
User.prototype.alertEat = function(food){
  alert(User.eat(food));//只能通过对象本身调用静态方法
  //alert(this.ear(food))这样调用将出错:this.eat is not a function
}
var user = new User();
user.alertAge();//alert:26
user.alertDo();//alert:fire子海学习js
user.alertEat('方便面')//alert:晚餐只有方便面

7. Règles d'appel de méthode statique

Lorsque vous utilisez des méthodes statiques, vous pouvez les appeler sans instancier l'objet. Les instances d'objet ne peuvent pas appeler les méthodes statiques de l'objet, uniquement les propriétés et méthodes statiques de l'instance elle-même

function User(){}
User.age = 26;//静态属性
User.myname = 'fire子海';
User.getName =function(){//静态方法
 
  return this.myname;
}
var user = new User();
console.log(user.getName);//TypeError: user.getName is not a function
user.supper = '方便面';
user.eat = function(){
 return '晚餐只有'+this.supper;
}
user.eat();//晚餐只有方便面

Les méthodes statiques ne peuvent pas appeler de propriétés publiques, de méthodes publiques, de méthodes privées, de propriétés privées, de méthodes privilégiées et de propriétés prototypes

function User(){
    this.myname = 'fire子海';//公有属性
    this.age = 26;
    this.do = function(){//特权方法
      return this.myname+'学习js';
    }
}
User.prototype.alertAge = function(){//公共方法,也叫原型方法
  alert(this.age);
}
User.prototype.sex = '男';//原型属性
User.getName= function(){//静态方法
  return this.myname;
}
User.getAge = function(){
   this.alertAge();
 
}
User.getDo = function(){
  return this.do();
}
//console.log(User.getName())//undefined
//console.log(User.getDo());//TypeError: this.do is not a function
//console.log(User.getAge())//TypeError: this.alertAge is not a function

8. Règles d'appel pour les méthodes privilégiées

Les méthodes privilégiées appellent des méthodes publiques et des propriétés publiques via cela, appellent des méthodes et des propriétés statiques via l'objet lui-même et appellent directement des propriétés privées et des méthodes privées dans le corps de la méthode

function User(girlfriend){
   var girlfriend = girlfriend;
   function getGirlFriend(){ 
     return '我女朋友'+girlfriend+'是美女!';
   }
  this.myname = 'fire子海';//公有属性
  this.age = 26;
  this.do = function(){//特权方法
    return this.myname+'学习js';
  }
  this.alertAge = function(){
   this.changeAge();//特权方法调用公有方法
    alert(this.age);
  }
  this.alertGirlFriend = function(){
   alert(getGirlFriend());//调用私有方法
  }
}
User.prototype.changeAge = function(){
  this.age = 29;
}
var user = new User('某某');
user.alertAge();//alert:29
user.alertGirlFriend();//alert:我的女朋友某某是美女!

9. Méthodes privées

Les méthodes et propriétés privées de l'objet ne sont pas accessibles de l'extérieur. A l'intérieur de la méthode, vous ne pouvez pas appeler les méthodes publiques, les propriétés publiques et les méthodes privilégiées de l'objet

function User(girlfriend){
   var girlfriend = girlfriend;
  this.myname = 'fire子海';//公有属性
  this.age = 26;
  function getGirlFriend(){ 
   //this.myname ;//此时的this指向的window对象,并非User对象,
    // this.myname = 'fire子海',此时的this指向的是getGirFriend对象了。
  //如果通过this调用了getGirFriend中不存在的方法呀属性,this便会指向window 对象,只有this调用了getGirlFriend存在的方法和属性,this才会指定getGirlFriend;
     alert(User.eat('泡面'));//alert:晚餐只有方便面
  }
  this.do = function(){//特权方法
    return this.myname+'学习js';
  }
  this.alertAge = function(){
   this.changeAge();//特权方法调用公有方法
    alert(this.age);
  }
  this.alertGirlFriend = function(){
   getGirlFriend();//调用私有方法
  }
}
User.eat = function(supper){
 return '晚餐只有'+supper;
}
var user = new User('某某');
user.alertGirlFriend();

Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.

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