我正在尋找類似的東西。答案不希罕,真的很吸引我,所以最後它有裂紋,自己...
http://jsfiddle.net/tn9upue0/1/
示例類
- $。動物()創建一個通用的動物,默認4條腿, 可以通過它的選項中的名稱,並可以描述自己。 $ .Dog()是Animal的一個子類,它可以「woof」,並可能知道一些技巧。 $ .Cat()是「喵」的動物的一個子類。 $ .Bird()是 動物的一個子類,它有2條腿,併發出「鳴叫」。
類實現
- 每個動物子類創建$。動物的一個實例稱爲父, 以後它可以用來調用父類的方法。當調用父親方法 時,上下文可能很重要。當它是,應該通過$ .proxy()調用方法 作爲上下文傳遞它。
實施例輸出
我的名字是未知的。我是一條有4條腿的動物。
我的名字是羅孚。我是一條有4條腿的動物。我說「woof」。我可以坐下,留下,翻身。
我叫Mittens。我是一條有4條腿的動物。我說「喵」。
我的名字是未知的。我是一隻有兩條腿的動物。我說「鳴叫」。
示例代碼
$.Animal = function (options) {
return {
options: options || {},
_getName: function() {
return this.options.name || 'unknown';
},
_getLegs: function() {
return 4;
},
describe: function() {
return 'My name is ' + this._getName() + '. I am an animal with ' + this._getLegs() + ' legs.';
}
}
};
$.Dog = function (options) {
var parent = $.Animal(options);
return $.extend({}, parent, {
describe: function() {
var s = $.proxy(parent.describe, this)() + ' I say "woof".';
if (this.options.tricks) {
s += ' I can ' + this.options.tricks + '.';
}
return s;
}
});
};
$.Cat = function (options) {
var parent = $.Animal(options);
return $.extend({}, parent, {
describe: function() {
return $.proxy(parent.describe, this)() + ' I say "meow".';
}
});
};
$.Bird = function (options) {
var parent = $.Animal(options);
return $.extend({}, parent, {
_getLegs: function() {
return 2;
},
describe: function() {
return $.proxy(parent.describe, this)() + ' I say "tweet".';
}
});
};
var animal = $.Animal(),
rover = $.Dog({name: 'Rover', tricks: 'sit, stay, and roll over'}),
mittens = $.Cat({name: 'Mittens'}),
bird = $.Bird();
$('#out').html(
animal.describe() + '<br>' +
rover.describe() + '<br>' +
mittens.describe() + '<br>' +
bird.describe()
);
尋找一種方式來做到這一點也沒有提供答案,我非常滿意。我在下面提供了一個替代jQuery解決方案,它利用$ .extend和$ .proxy。 – xtempore 2015-07-15 01:56:01