通过this在当前对象自身上添加属性和方法,通过原型prototype继承公共属性和方法。
JavaScript的函数作用域,即函数内部的变量和方法在外界是访问不到的,通过此特性即可创建私有属性和方法。
在函数内部通过this创建的属性和方法,每个实例化对象都拥有一份,并且外部可访问。
通过this创建的方法,不仅可以访问公有属性和方法,还能访问类的私有属性和方法,故而可以用这些特权方法来初始化实例对象,创建对象时调用特权方法可以看作是类的构造器。
类外部通过点语法添加的属性和方法,在使用new关键字创建对象时没有执行到,所以对象实例无法获取,称为静态属性和方法。
由于JavaScript原型链的特性,新实例对象的prototype和类的prototype指向的是同一个对象,所以实例对象可以共享在原型上定义的公共属性和方法。
下面示例中,person的name和race在出生时设定,并且永远不变。创建时,从一岁开始,并定好了寿命,寿命值隐藏外部不可见。对于体重,进食时增加,锻炼时减少。每次进食或者锻炼,都会长大一岁。人物对象具有公开的clothing属性,任何人都可以查看修改。公开的dirtFactor污垢因子,可以手动修改增加灰尘或清除污垢,每次进食或者锻炼,它也会增加,但可以通过shower()方法减少。
下面是Person类使用示例。
参考:http://phrogz.net/JS/Classes/OOPinJS.html