http://uefirst.com/bbs/simple/?t240.html
JavaScript中的原型
JavaScript中的原型(Prototype)是JavaScript最特别的地方之一。无论是实现JavaScript的面向对象还是继承,使用prototype都必不可少。
1 使用原型实现JavaScript的面向对象
“原型”表示对象的原始状态,JavaScript中的每个对象都有一个prototype属性,但是只有Function类型的prototype属性可以使用脚本直接操作。Object的prototype属于内部属性,无法直接操作。prototype属性本身是一个object类型。一个函数的prototype上所有定义的属性和方法,都会在其实例对象上存在。所以说prototype就是C#类中的实例方法和实例属性。实例方法和静态方法是不同的,静态方法是指不需要声明类的实例就可以使用的方法,实例方法是指必须要先使用"new"关键字声明一个类的实例, 然后才可以通过此实例访问的方法。
下面是两种方法的声明方式:
function staticClass() { }; //声明一个类 staticClass.staticMethod = function() { alert("static method") }; //创建一个静态方法 staticClass.prototype.instanceMethod = function() { "instance method" }; //创建一个实例方法
staticClass.staticMethod();
staticClass.instanceMethod(); //语句错误, 无法运行.
var instance = new staticClass();//首先实例化 instance.instanceMethod(); //在实例上可以调用实例方法
function Car() { //声明属性 this.color = "none"; //声明方法 if (typeof Car._initialized == "undefined") { Car.prototype.showColor = function() { alert(this.color); } } Car._initialized = true; }; var car = new Car(); car.showColor(); //输出 输出为 "none" car.color = "blue"; car.showColor(); //输出 输出为 "blue"
GoodCar.prototype = new Car();
var goodCar = new GoodCar(); goodCar.showColor(); //输出 "none"
//创建GoodCar类 function GoodCar() { } GoodCar.prototype = new Car(); GoodCar.prototype.run = function() { alert("run fast"); }