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

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

WBOY
풀어 주다: 2016-05-16 16:03:27
원래의
1261명이 탐색했습니다.

요즘 웹사이트 개발자들에게 자바스크립트는 꼭 마스터해야 할 언어입니다. 그러나 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();
로그인 후 복사

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿