类充当创建对象的一个模板或蓝图。新创建的类,可以从其它类继承功能,并且充当根据这种继承关系而创建的对象的蓝图,从而在继承系统中创建一种子类关系。
相反, JavaScript 拥有一个继承的原型系统,其中,原型是对象的一个功能化的实例,并且对象直接从这样的父对象来继承。为了在这些概念之间构建起桥梁, JavaScript 最近引入了一个 class 关键字。
这个版本还有一个叫作构造函数( constructor )的函数,该函数是在用 new 关键字创建对象时所运行的函数。在前面的例子中,通过构造函数,我们可以很容易地在对象定义中为 name 和 animal 设置值。
var myCat = new Pet("cat", "Sylvester"); 构造函数的有用之处在于,可以编写一个新对象的设置和初始化过程所需的任何代码。
通过使用 get 和 set ,我们可以在读取对象的属性(在 get 的情况下)或写入对象的属性(在 set 的情况下)时,运行特定代码。例如,可以用 set 来检查将要用来设置一个属性值的某些数据的有效性,或者用 get 返回一个计算的或特定格式的值。 如果为一个对象定义了 get 和 set ,在通过常规的点表示法来访问对象的属性和方法时,就会显式地调用它们。
注意,在 getter 和 setter 中, name 属性现在以一个下画线字符作为前缀,成了 _name 。使用这个下画线是必需的,为了防止 JavaScript 解释器中的一种情况,即由于没有这一预防措施而导致 get 被重复调用,由此形成一个无限循环,并且最终导致程序因栈溢出而停止运行。实际上,要隐藏私有的、内部的属性值 _name ,而允许外界访问 name 属性。
getter 和 setter 是在读取和写入一个对象的属性时自动运行代码的一种方便方法。使用它们,可以不允许直接给对象的属性赋值,而是通过一个 setter 方法来控制所有赋值,从而保证实际的对象属性是私有的。