重学es6

class讲解之小结 实例方法和属性、静态方法和属性、私有方法和

2020-08-10  本文已影响0人  zhang463291046

以下内容是引用或者借鉴别人的,自己只是做个笔记,方便学习。理解错误的地方,欢迎评论。如有侵权,私聊我删除,未经允许,不准作为商业用途

class中,写法如下

class Foo {
  a = 1  // 实例属性
  static b = 2  // 静态属性
  #c = 3  // 私有属性
  baz() {  // 实例方法
    
  }
  static bar() { // 静态方法
    
  }
  #bac() { // 私有方法
   
  }
}

// 等同
function Foo(){
  this.a = 1;
  var c = 3;
  function bac(){

  }
}
Foo.b = 2;
Foo.bar = function(){}
Foo.prototype.baz = function(){}

图解


image.png

实例方法的调用规则:

class Foo {
  a = 1  // 实例属性
  static b = 2  // 静态属性
  #c = 3  // 私有属性
  baz() {  // 实例方法
    console.log(this.a)
    console.log(Foo.b)
    this.baz2()
    Foo.bar()
  }
  baz2() {
    console.log('world')
  }
  static bar() { // 静态方法
    
  }
  #bac() { // 私有方法
   
  }
}
var f = new Foo();
f.a; // 1
f.baz2() //world

静态方法的调用规则

class Foo {
  a = 1  // 实例属性
  static b = 2  // 静态属性
  #c = 3  // 私有属性
  baz() {  // 实例方法
   
  }
  static bar() { // 静态方法
    console.log(Foo.b)  //2
    Foo.bar2()   //world
    console.log(this.a)  // 错误,this指Foo
    console.log(this.#c) // 错误
    this.baz()  // 错误
    this.#bac()  // 错误
  }
  static bar2() {
    console.log('world')
  }
  #bac() { // 私有方法
   
  }
}
var f = new Foo();
Foo.b; // 2
Foo.bar2(); //world
f.b //错误
f.bar2() //错误

私有方法的调用规则

class Foo {
  a = 1  // 实例属性
  static b = 2  // 静态属性
  #c = 3  // 私有属性
  baz() {  // 实例方法
   
  }
  static bar() { // 静态方法
    
  }
  #bac() { // 私有方法
     console.log(Foo.#c) ; //3
     Foo.#bac2(); //world
    console.log(this.a)  // 错误,this指Foo
    console.log(Foo.b) // 2
    console.log(this.b) // 2,此时this指Foo
    this.baz()  // 错误
    Foo.bar()  
  }
  #bac2() { // 私有方法
     console.log('world')
  }
}
var f = new Foo();
Foo.#c(); // 错误
Foo.#bac() // 错误
f.#c;// 错误
f.#bac();// 错误

除此之外,还有一种特殊的特权方法在类class上未进行实现,特权方法的调用规则:

function Foo(){
  this.a = 1;
  var c = 3;
  function bac() {
    console.log('3')
  }
  this.bad = function(){ // 特权方法
    console.log(this.a);  //1
    console.log(Foo.b);  //2
    console.log(c);  //3
    this.baz(); //1
    Foo.bar(); //2
    bac(); //3
  }
}
Foo.b = 2;
Foo.bar = function(){
  console.log('2')
}
Foo.prototype.baz = function(){
  console.log('1')
}
var f = new Foo();
f.bad ()
上一篇 下一篇

猜你喜欢

热点阅读