研究員程序員, 對於這個嚴重問題的問題感到抱歉,但我是編程新手,這是我無法弄清楚的作業的一部分。在任務的條件是這樣的..如何在每次調用其他方法之一時在JavaScript中爲類引發密碼確認方法?
我代表筆記本的抽象類 - AbstractNotebook,它具有類似的方法:
-addTextToPage();
-deleteTextFromPage();
-read();...
我想從一個類繼承到表示一類ProtectedNotebook,與AbstractNotebook類中的所有內容相同,只是它有一個密碼,它是通過創建一個新實例來定義的,實際的東西我不知道該怎麼做:
每次調用方法時在ProtectedNotebook類的實例中,首先我必須讓用戶爲該實例編寫密碼然後實際的方法可以繼續。
//我的抽象類是:
function AbstractNotepad() {
if (this.constructor.name == 'AbstractNotepad') {
throw new Error('This class is abstract and cannot be instanciated');
}
}
AbstractNotepad.prototype.getPages = function() {
return this.pages;
};
AbstractNotepad.prototype.insertPage = function(page) {
if(page instanceof Page){
this.pages.push(page);
}
};
AbstractNotepad.prototype.getPageNumber = function() {
return getPages()[pageNumber - 1];
};
AbstractNotepad.prototype.addTextToPage = function(pageNumber, textToAdd) {
this.getPageNumber().setText(this.getPageNumber().getText() + ' ' + textToAdd);
};
AbstractNotepad.prototype.swapTextInPage = function(pageNumber, text) {
this.getPageNumber().deleteText();
this.getPageNumber().setText(text);
};
AbstractNotepad.prototype.deleteTextFromPage = function(pageNumber) {
this.getPageNumber().deleteText();
};
AbstractNotepad.prototype.readNotebook = function() {
for (var i = 0; i < this.getPages().length; i++) {
console.log((i + 1) + '\n' + this.getPages()[i].read())
}
}
//實際ProtectedNotebook類是目前的樣子:
var moduleSecure = (function(){
function SecuredNotepad (pass) {
this.pages = [];
var password = pass;
this.getPass=function(){ //obviously left for debugging purposes
return password;
}
}
SecuredNotepad.prototype = Object.create(AbstractNotepad.prototype);
SecuredNotepad.prototype.constructor = SecuredNotepad;
return {
createNotebook: function(pass){
var reg = /(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{5,}/;
if(!reg.test(pass)){
throw new Error('password is not valid');
}
return new SecuredNotepad(pass);
}
}
})();
這是actualy可能嗎?或者我必須完全覆蓋所有的方法,只是爲他們添加了配置部分? Thak你提前! Kristian
謝謝你的答案,託德!我需要一點時間才能掌握這個概念(我自己從來不會這麼做),但是我已經設法實現它。乾杯! –