Javascript本身不是面向对象的语言,但是,使用基于Prototype使得javascript具备面向对象的形。以Prototype对象来装饰存在的object,被称为“class-less, prototype-oriented, or instance-based programming”编程。
请看下面的一个简单的例子:
var BaseCar = function(config) {
this.octaneRequired = 86;
this.shiftTo = function(gear) {
this.gear = gear;
};
this.shiftTo('park');
};
BaseCar.prototype = { engine : 'I4', turbo : false, wheels : 'basic',
getEngine : function() {
return this.engine;
},
drive : function() {
return 'Vrrrrooooooom - I\'m driving!';
}
};
//test the BaseCar
var mySlowCar = new BaseCar(); mySlowCar.drive(); console.log(mySlowCar.getEngine());
console.log('mySlowCar contents:');
console.dir(mySlowCar);
//--------------------------
var PremiumCar = function() {
PremiumCar.superclass.constructor.call(this);
this.octaneRequired = 93;
};
/*inheritance the BaseCar class*/
PremiumCar.prototype = new BaseCar();
PremiumCar.superclass = BaseCar.prototype;
PremiumCar.prototype.turbo = 'true';
PremiumCar.prototype.wheels = 'premium';
PremiumCar.prototype.drive = function() {
this.shiftTo('drive'); PremiumCar.superclass.drive.call(this);
};
PremiumCar.prototype.getEngine = function() {
return 'Turbo ' + this.engine;
};
//test
var myFastCar = new PremiumCar();
myFastCar.drive();
console.log('myFastCar contents:'+ PremiumCar.prototype.turbo);
console.dir(myFastCar);
定义了一个基类BaseCar类,然后定义对应的 prototype属性集合。值得指出的是prototype为一个匿名的方法对象。PrimiumCar继承BaseCar是通过
PremiumCar.superclass.constructor.call(this);
实现的。 通过constructor调用(call)基类,实现继承父类的方法和属性。为了便于理解,将代码copy到Firefox的debug控制台中运行,可以等到 我们想要的结果。