
//=實戰(zhàn)?探測器
!function(global)?{
function?DetectorBase(configs)?{
if?(!this?instanceof?DetectorBase)?{
throw?new?Error('Do?not?invoke?without?new.');
}
this.configs?=?configs;
this.analyze();
}
DetectorBase.prototype.dectect?=?function?()?{
throw?new?Error('Not?implemented!');
}
DetectorBase.prototype.analyze?=?function()?{
console.log('analyzing...');
this.data?=?'###data###';
}
function?LinkDetector(links)?{
if?(!this?instanceof?LinkDetector)?{
throw?new?Error('Do?not?invoke?without?new.');
}
this.links?=?links;
DetectorBase.apply(this,?arguments);
}
function?ContainerDetetor(containers)?{
if?(!this?instanceof?ContainerDetetor)?{
throw?new?Error('Do?not?invoke?without?new.');
}
this.containers?=?containers;
DetectorBase.apply(this,?arguments);
}
//inherit?first
inherit(LinkDetector,?DetectorBase);
inherit(ContainerDetetor,?DetectorBase);
//expand?later
LinkDetector.prototype.dectect?=?function()?{
console.log('Loading?data:'?+?this.data);
console.log('Link?detection?started');
console.log('Scanding?links:'?+?this.links);
}
ContainerDetetor.prototype.dectect?=?function()?{
console.log('Loading?data:'?+?this.data);
console.log('containers?detection?started');
console.log('Scanding?containers:'?+?this.containers);
}
//prevent?from?being?altered
Object.freeze(DetectorBase);
Object.freeze(DetectorBase.prototype);
Object.freeze(LinkDetector);
Object.freeze(LinkDetector.prototype);
Object.freeze(ContainerDetetor);
Object.freeze(ContainerDetetor.prototype);
//export?to?global?object
Object.defineProperties(global,?{
LinkDetector:{value:?LinkDetector},
ContainerDetetor:{value:?ContainerDetetor},
DetectorBase:{value:?DetectorBase}
});
function?inherit(subClass,?superClass)?{
superClass.prototype?=?Object.create(superClass.prototype);
superClass.prototype.constructor?=?subClass;
}
}(this);
var?cd?=?new?ContainerDetetor('#abc?#def?#ghi');
var?ld?=?new?LinkDetector('https://www.taobao.com/?https://www.tmall.com/?https://www.baidu.com/');
cd.dectect();
ld.dectect();
2020-06-04
function?inherit(subClass,?superClass)?{
????????????superClass.prototype?=?Object.create(superClass.prototype);
????????????superClass.prototype.constructor?=?subClass;
????????}
寫錯了? 應(yīng)該為
subClass.prototype?=?Object.create(superClass.prototype);
subClass.prototype.constructor?=?subClass;
注意形參