美文网首页
Javascript 类中的变量需要共享时怎么办

Javascript 类中的变量需要共享时怎么办

作者: 想溜了的蜗牛 | 来源:发表于2020-09-07 17:37 被阅读0次

场景:

写了一个JS类, 里面全是静态方法,开发时觉得没什么状态需要共享的,但做着做着发现掉坑里了。因为有些状态数据需要共享。到这应该知道本文要讲啥了吧?没错,就是JS的对象原型链。

JS 的对象也是使用 new 来创建,但JS new命令后面跟的不是类,而是构造函数。

用构造函数生成实例对象,有一个缺点,那就是无法共享属性和方法。

function Dog(name){

    this.name = name

    this.specie = 'dog'

}

var dogA = new Dog('big')

var dogB = new Dog('small')

//  这两个对象的species属性是独立的,修改其中一个,不会影响到另一个

dogA.species = 'cat';

alert(dogB.species); // 显示"dog",不受dogA的影响

每一个实例对象,都有自己的属性和方法的副本。这不仅无法做到数据共享,也是极大的资源浪费。

怎么解决呢?

使用 prototype 属性, 这个属性包含一个对象(以下简称"prototype对象"),所有实例对象需要共享的属性和方法,都放在这个对象里面;那些不需要共享的属性和方法,就放在构造函数里面

实例对象一旦创建,将自动引用prototype对象的属性和方法。也就是说,实例对象的属性和方法,分成两种,一种是本地的,另一种是引用的。

refer: 阮一峰老师的Javascript继承机制的设计思想 

相关文章

  • Javascript 类中的变量需要共享时怎么办

    场景: 写了一个JS类, 里面全是静态方法,开发时觉得没什么状态需要共享的,但做着做着发现掉坑里了。因为有些状态数...

  • 用模块封装代码

    《深入理解ES6》阅读随笔 在 ES6 之前,JavaScript 中的变量和函数都是全局共享,并没有其他语言中类...

  • javascript 的数据类型转换

    JavaScript是弱类型语言 声明变量时,不需要指定它的数据类 var name; 数据类型是由变量的值,来决...

  • python的调用类变量和实例变量、类方法和静态方法以及实例方法

    一、Python中的变量和方法分类 类变量:定义在class中且method外,为类和所有实例共享,包括publi...

  • 6.面向对象高级部分

    一、static 静态变量 语法: 当需要某个类共享一个变量的时候就可以用静态变量 静态变量随着类加载就初始化了 ...

  • Python实例变量和类变量

    Python实例变量和类变量 类变量(类属性): 类变量属于类所有,所有实例共享一个变量 实例变量(实例属性) 实...

  • python asyncio并发编程(6)

    1.单线程协程共享变量 在协程中多个协程任务共享一个变量时不会对变量早成影响,即不需要加锁,但前提是任务中没有aw...

  • java分布式锁

    ### 什么是锁? 在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做...

  • Java Synchronized同步机制分析

    在Java运行时环境中,JVM需要对两类线上共享的数据进行协调:(1)存储在堆中的实例变量(2)存储在方法区的类变...

  • 分布式锁的设计

    什么是锁?在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其...

网友评论

      本文标题:Javascript 类中的变量需要共享时怎么办

      本文链接:https://www.haomeiwen.com/subject/bdslektx.html