一般我们在使用javascript中的类的时候,都是通过new来实例化这个类得到一个对象。
使用new这个关键字,会改变函数上下文环境,并且改变了return语句的行为。
比如一个Person类如下:
function Person() {
this.name = "hello";
};
当我们new Person的时候,改变的函数执行的上下文,因此,这个类拥有了一个属性name,值为hello。 同时new还会改变return 语句的行为,会返回这个Person实例。
然而当我们直接调用Person()方法的时候,由于没有使用new关键字,因此函数执行的上下文没有改变,依然是window。
因此window多了一个属性name,值为hello。
测试代码如下:
1 var Person = function(name) {
2 this.name = name;
3 };
4
5 var format = new Person('format');
6
7 console.log(format instanceof Person);
8
9 console.log("window property -> name:" + this.name);
10
11 Person('format');
12
13 console.log("window property -> name:" + this.name);
结果如下:

理解了上面所说的原理之后,开始构建javascript"类"库。
var Class = function() {
var klass = function() {
this.init(arguments);
};
klass.prototype.init = function() {};
return klass;
};
var Person = new Class;
Person.prototype.init = function() {
//类似构造方法。可以在这里做一些初始化操作。
}
//由于Class返回的依旧是一个函数,也就是类。因此我们可以实例化这个类。 得到实例对象
var person = new Person;
....
有了这个类库之后, 当我们需要自己的类的时候,只需要new Class即可。 然后根据需求写自己的初始化代码。