在基于类的语言中,对象是类的示例,对象也可以从其他对象中继承。JS是一门基于原型的语言,这意味着对象可以从其他对象中继承。
1.伪类
伪类的本意是向面向对象靠拢。但是虽然我们有了行为像类的构造器函数,但是也存在诸多缺憾,如没有私有环境,所有的属性都是公开的,无法访问supper(父类)的方法。使用构造器会存在的另一个问题是,如果构造器函数前面没有加上new,this将会被绑定到全局对象上。
2.对象说明符
主要是为了解决构造器在接受一大串参数时,记住所有的参数顺序会非常困难。因此采用对象说明符,举例如下:
var myObject=maker{{
first:f,
last: l,
state:s,
city:c
}};
无对象说明符时的代码如下:
var myObject=maker{f,l,s,c};
此时多个参数可按任意顺序排列,如果构造器聪明的使用默认值,那么一些参数可以忽略掉,并且代码也更易于阅读。
3.原型
在一个纯粹的原型继承模型中,我们会摒弃类,转而专注于对象,从这个意义上讲,原型和基类具有类似的作用。基于原型的继承本质上就是对象继承对象,实现了一种差异化继承。JS中,一个作用域({}标示的范围)被确定后,一个内部作用域会继承它的外部作用域。
4.函数化
相对于伪类模式,可以得到更好的封装和信息隐藏,以及访问父类方法的能力.
如果一个对象的所有状态都是私有的,那么该对象就是一个防伪对象,其属性可以被替换或删除,但是完整性不会被破坏。
如果用函数化的样式创建一个对象,并且所有的方法都不使用this或that,该对象就是持久性的,本质上就是一个简单功能函数的集合