我正在編寫一些JavaScript類(舊學校,不使用ES2015/ES6,我不想使用Babel或其他轉換器),並且我有一個繼承另一個,覆蓋其中一個父方法。對原型類使用對象文字
所以,我有我的初步App.Hello
類:
var App = {};
App.Hello = function(args) {
this.name = args.name;
}
App.Hello.prototype = {
constructor: App.Hello,
sayHello: function() {
console.log('Hello, ' + this.name);
},
sayGoodbye: function() {
console.log('Goodbye, ', this.name);
}
}
的然後我App.Yo
類從它繼承:
// inherits from App.Hello
App.Yo = function(args) {
App.Hello.call(this, args);
}
App.Yo.prototype = Object.create(App.Hello.prototype);
App.Yo.prototype = { // want to combine this with above!
constructor: App.Yo,
sayHello: function() {
console.log('Yo, ', this.name);
}
}
但是因爲我使用對象字面結構我改寫的原型App.Yo
當我通過它constructor
和sayHello
方法後設置Object.create
。所以我沒有從App.Hello
繼承sayGoodby方法
1.我怎樣才能解決這個問題,但使用文字結構?
我知道我可能只是這樣做:
App.Yo.prototype = Object.create(App.Hello.prototype);
App.Yo.prototype.constructor = App.Yo;
App.Yo.prototype.sayHello = function sayHello() {
console.log('Yo, ', this.name);
}
但我想保持字面結構,我的課將會有很多在他們不同的方法。所以想保持它的漂亮和整潔。
2.是否可以將整個類嵌套爲文字?那麼構造函數也嵌套爲文字的一部分嗎?
例如
App.Hello = function(args) {
this.name = args.name;
}
和
App.Yo = function(args) {
App.Hello.call(this, args);
}