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

2020-09-07  本文已影响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继承机制的设计思想 

上一篇 下一篇

猜你喜欢

热点阅读