你可以做到這一點,沒有任何額外的庫 - 它只是稍微冗長。
jsFiddle
首先建立一個car
類,並給它一些方法(setColor
,setMake
和setModel
):
function car(make,model){
console.log('car constructor');
this.setMake(make);
this.setModel(model);
}
car.prototype.setColor = function(color){ this.color = color; };
car.prototype.setMake = function(make){ this.make = make; };
car.prototype.setModel = function(model){ this.model = model; };
car.prototype.toString = function(){ return 'This is a ' + this.color + ' ' + this.make + ' ' + this.model + ' car' };
然後你可以從車內繼承:
function volvo(model){
console.log('volvo constructor');
car.call(this, 'volvo', model);
}
volvo.prototype = Object.create(car.prototype);
volvo.prototype.constructor = volvo;
看各個部分,然後:
function volvo(model){}
定義了一個volvo
類。
- 並在構造函數
car.call(this, 'volvo', model);
中用於調用父類的構造函數,其固定品牌爲volvo
。
volvo.prototype = Object.create(car.prototype);
設置volvo
類繼承car
類。
volvo.prototype.constructor = volvo;
用於確保volvo
類使用volvo
構造函數(沒有以上語句會導致它使用car
構造函數)。
然後,我們可以測試:
var c = new car('Ford', 'Fiesta');
c.setColor('Red');
console.log(c.toString());
var v = new volvo('S10');
v.setColor('Grey');
console.log(v.toString());
輸出(包括顯示當構造被稱爲日誌條目):
car constructor
This is a Red Ford Fiesta car
volvo constructor
car constructor
This is a Grey volvo S10 car
如果你需要爲Object.create
一個填充工具那麼你可以使用:
if (!Object.create) {
Object.create = (function(){
function F(){}
return function(o){
if (arguments.length != 1) {
throw new Error('Object.create implementation only accepts one parameter.');
}
F.prototype = o
return new F()
}
})()
}
來源
2013-12-12 00:33:00
MT0
你的意思是僞古典類實例的關係? – gchiconi
除非您有某種面向公衆的方法或屬性允許訪問有問題的顏色,否則不會。 –
您可以使用Resig helper函數,但理解構造函數和原型如何在JavaScript中工作可能是一個好主意。也許這個答案可以幫助那個:http://stackoverflow.com/a/16063711/1641941 – HMR