面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装、继承、多态的特性!但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义JS中对象:无序属性的集合,其属性可以包含基本值、对象或者函数。可以简单理解为JS的对象是一组无序的值,其中的属性或方法都有一个名字,根据这个名字可以访问相映射的值(值可以是基本值/对象/方法)。
1.组合构造函数及原型模式
jQuery类型的封装就是使用组合模式来实例的,这是目前最为常用的定义类型方式,构造函数模式用于定义实例的属性,而原型模式用于定义方法和共享的属性。结果,每个实例都会有自己的一份实例属性的副本,但同时又共享着对方方法的引用,最大限度的节约内存。此外,组合模式还支持向构造函数传递参数,让我们来看一下下面的例子
function Utils(name){
this.name = name;
}
Utils.prototype ={
constructor : Utils,
getName : function (name1){
return name1 == this.name;
}
}
var u = new Utils('cc');
console.log(u.getName('dd'));
首先定义了构造函数Utils,所有属性都在构造函数中定义
然后所有的方法通过原型来实现,通过constructor可以知道当前对象是通过哪个构造函数构造出来的