How to use base class methods in a subclass of a Builtin JavaScript class in javascript -


in c# example can extend framework type , assign expression type , retain members of base type have extended methods.

i'm trying inherit sentence range.

note suggested duplicate doesn't apply here because range not susceptible these techniques.

how can achieve in javascript? have:

/* namespace */ var webpagereader = webpagereader || {};  /* classes */ webpagereader.sentence = function(range) {     this.setstart(range.startcontainer, range.startoffset); // bombs here     this.setend(range.endcontainer, range.endoffset);   };  function test(){   webpagereader.sentence.prototype = new range();   var dom = new webpagereader.dom();   var s = new webpagereader.sentence(dom.getselectedrange());   alert(s.endoffset)  ; } webpagereader.dom = function() {    /* public methods */   this.getselectedrange = function() {     var sel;     if (window.getselection) {       sel = window.getselection();       if ((sel.type == "range" || allowcaretselection) && sel.rangecount) {         return sel.getrangeat(0);       }     }     return null;   } } 

this gives error:

uncaught typeerror: illegal invocation

attempt #2

when change code this:

/* namespace */ var webpagereader = webpagereader || {};  /* classes */ webpagereader.sentence = function(range) {   range.call(this); };  function test(){   webpagereader.sentence.prototype = new range();   var dom = new webpagereader.dom();   var s = new webpagereader.sentence(dom.getselectedrange());   alert(s.endoffset)  ; } 

i error

uncaught typeerror: failed construct 'range': please use 'new' operator, dom object constructor cannot called function.

you not subclassing properly. should use es6 classes.

var webpagereader = {    dom: function() {      this.getselectedrange = function() {        if (!window.getselection) return null;        return window.getselection().getrangeat(0);      }    },    sentence: class extends range {      constructor(range) {        super();        this.setstart(range.startcontainer, range.startoffset);        this.setend(range.endcontainer, range.endoffset);      }    }  };  document.body.addeventlistener('click', function() {    var dom = new webpagereader.dom();    var s = new webpagereader.sentence(dom.getselectedrange());    console.log(s.endoffset);  });
select text

it works because super() initializes instance real range. in es5 can things making instance inherit range.prototype, not enough real range instance. , range methods can called on real range instances.


Comments

Popular posts from this blog

javascript - Thinglink image not visible until browser resize -

firebird - Error "invalid transaction handle (expecting explicit transaction start)" executing script from Delphi -

mongodb - How to keep track of users making Stripe Payments -