关于老师提到的「静态方法只能访问静态属性」,如何理解这个只能呢?

来源:4-5 【单件设计模式关联的深层技能】静态属性9大规则+静态方法-1

luckept

2022-04-04

因为其实从代码的层面来看,它最终都被转换成了 JS 代码。
这是否就意味着在静态方法中可以通过 this.prototype 访问到类的原型对象空间呢,那么这样一来即使外部不能通过创建新的实例去访问原型对象,也可以通过类暴露出的静态方法去操作原型对象空间。
那么要如何去理解静态方法只能访问静态属性呢?它也是能够通过 「this.prototype.原型对象空间上的方法」去访问原型对象空间的呀
这是否只是一种主观意义上的描述呢?为了让同学们更好的理解静态成员而做的一种定义呢?

以下是关于此问题的代码补充及运行截图

interface ItfcStorage {
  [key: string]: any
}

class LStorage {
  storage!: ItfcStorage
  setstorage(key: string, val: string) {
    if (!this.storage) this.storage = {}
    this.storage[key] = val
  }
  getstorage(key: string) {
    console.log(this.storage)
    return this.storage[key]
  }
  static setItem(key: string, val: string) {
    this.prototype.setstorage(key, val)
  }
  static getItem(key: string) {
    return this.prototype.getstorage(key)
  }
}

LStorage.setItem('name', 'Tom')
const result = LStorage.getItem('name')
console.log('result=>', result)

图片描述

写回答

2回答

keviny79

2022-04-04

路过同学了解下--老师新课程全栈当当书城优惠倒计时2天,截至2022年7月19号平台将课程恢复原价,有意向同学趁早出手【此条非问题解答,见谅!】

class MyLocalStorage {

  count3: number = 30

  // 静态属性和对象属性[实例属性】是类中两大成员

  static localstorage: MyLocalStorage = new MyLocalStorage() //静态引用属性

  static count: number = 3 //静态的基本类型属性

  public static Test() {



     //1. 首先 【静态方法只能访问静态属性和静态方法」 这句话完全正确, 视频忘记加上静态方法几个字

     //2.  prototype本身也是一个特殊的静态对象属性,

     // 静态方法调用的是prototype这个静态对象属性

   // 而后面的go()这个实例方法是prototype对象属性对象调用到的, 这和静态方法本身无关了

    //this.prototype.go()

      //3.就好比一个静态的实例对象可以调用到实例方法go()方法一样,

    // go()是实例对象localstorage调用到的

    this.localstorage.go()

    //console.log('Abc')

  }


1
2
keviny79
回复
luckept
是的。
2022-04-04
共2条回复

keviny79

2022-04-04

//img.mukewang.com/szimg/624ab5a908ae348411220765.jpg

同学参见截图,有详细的解释

1
0

晋级TypeScript高手,成为抢手的前端开发人才

轻松驾驭 TypeScript 高级用法, 突破前端成长瓶颈

871 学习 · 425 问题

查看课程