>웹 프론트엔드 >JS 튜토리얼 >js 객체지향_javascript 기술의 공개, 비공개, 정적 속성 및 메소드에 대한 자세한 설명

js 객체지향_javascript 기술의 공개, 비공개, 정적 속성 및 메소드에 대한 자세한 설명

WBOY
WBOY원래의
2016-05-16 16:03:271263검색

요즘 웹사이트 개발자들에게 자바스크립트는 꼭 마스터해야 할 언어입니다. 그러나 jquery와 같은 프레임워크의 인기와 사용으로 인해 많은 사람들이 네이티브 자바스크립트에 대한 깊이 있는 이해가 부족하고 익숙합니다. 클로저와 프로토타입에 대한 편집 스타일은 항상 명확하지 않습니다. js 객체지향을 잘 활용하지 못하는 것인데, js 객체지향을 이해하기 위해서는 먼저 js에 public 메소드, 특권 메소드, static 메소드가 무엇인지 이해해야 합니다

방법/단계

1. 공공재산과 공공방법

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. 사유 속성 및 메소드

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

3. 정적 속성 및 메서드

PHP에서는 인스턴스화 없이 호출할 수 있는 메서드를 정적 메서드라고 합니다. JS에서도 마찬가지입니다. 즉, 개체를 구체화하기 위해 new 연산자를 사용하면 개체의 메서드와 속성을 호출할 수 있습니다. .

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. 특권 메소드

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. 정적 클래스

정적 메서드와 정적 속성의 경우 세 번째 단계처럼 생성할 필요가 없습니다. 네티즌들이 내 기사 "JS에서 이미지 캐러셀을 만드는 방법"을 읽었다면 다음을 사용하여 생성할 수 있다는 것을 알게 될 것입니다. 리터럴.

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. 공개 메소드 호출 규칙

공개 메소드를 호출하려면 먼저 객체를 인스턴스화해야 합니다

퍼블릭 메서드에서는 이를 사용하지 않고 퍼블릭 속성과 권한 있는 메서드를 호출합니다. 이를 사용하여 정적 메서드 및 속성을 호출할 수는 없습니다. 즉, 개체 이름을 통해 호출해야 합니다. 공개 메소드는 비공개 메소드를 호출할 수 없습니다

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. 정적 메서드 호출 규칙

정적 메서드를 사용하는 경우 개체를 인스턴스화하지 않고도 호출할 수 있습니다. 개체 인스턴스는 개체의 정적 메서드를 호출할 수 없으며 인스턴스 자체의 정적 속성과 메서드만 호출할 수 있습니다.

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();//晚餐只有方便面

정적 메서드는 공용 속성, 공용 메서드, 전용 메서드, 전용 속성, 특권 메서드 및 프로토타입 속성을 호출할 수 없습니다.

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. 특권 메서드 호출 규칙

특권 메소드는 이를 통해 퍼블릭 메소드와 퍼블릭 속성을 호출하고, 객체 자체를 통해 정적 메소드와 속성을 호출하며, 메소드 바디에서 프라이빗 속성과 프라이빗 메소드를 직접 호출합니다

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. 비공개 방법

객체의 프라이빗 메서드와 속성은 외부에서 접근할 수 없습니다. 메서드 내부에서는 해당 객체의 퍼블릭 메서드, 퍼블릭 속성, 권한 있는 메서드를 호출할 수 없습니다.

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();

위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.