JavaScript inheritance or how does it work?

I am trying to achieve a degree of inheritance in JavaScript, and here is what I still have:

function Address() {
    this.address1 = ko.observable();
    this.address2 = ko.observable();
    this.country = ko.observableSafe(null, new Country(-1, '', false));
    this.city = ko.observable('');
    this.state = ko.observable();
    this.province = ko.observable('');
    this.zipCode = ko.observable();

    this.countryLookupID = '';
    this.stateLookupID = '';

    ko.computed(function () {
        var newCountry = this.country();
        if (newCountry) {
            this.countryLookupID = newCountry.id.toString();
            if (newCountry.international) {
                this.clearDomestic();
            }
            else {
                this.clearInternational();
            }
        }
        else {
            this.countryLookupID = "";


    }, this);
    ko.computed(function () {
        var newState = this.state();
        if (newState) {
            this.stateLookupID = newState.id.toString();
        }
        else {
            this.stateLookupID = "";
        }
    }, this);
}
Address.prototype.clearDomestic = function () { return true; };
Address.prototype.clearInternational = function () { return true; };

function Company() {
    this.base = Address;
    this.base(this);
    this.legalEntityID = ko.observable(0);
    this.legalEntityName = ko.observable('');
    this.isFemaleOwned = ko.observable(false);
    this.isMinorityOwned = ko.observable(false);
    this.webAddress = ko.observable();

    this.businessPhone = ko.observable();
    this.faxNumber = ko.observable();

    this.locked = ko.observable(false);

}
Company.prototype.constructor = Address;
Company.prototype.clearDomestic = function () {
    this.businessPhone('');
    this.state(null);
    this.zipCode('');
};
Company.prototype.clearInternational = function () {
    this.province('');
};

If you are not familiar with the Knockout platform, this is normal, as this probably does not apply to this discussion. I did not see that inheritance was carried out exactly as I looked. As of now, it works exactly the way you think. When called clearDomestic(), the correct version of the function is called in the inherited class, and thispoints to an object Company. If I pulled out baseand called base(this), it will break.

- , ? , - , , ? .

UPDATE

Address this.clearDomestic() ko.computed, clearDomestic(), Company, this Address businessPhone .

2

, . , , .

function Address() {
    this.address1 = ko.observable();
    this.address2 = ko.observable();
    this.country = ko.observableSafe(null, new Country(-1, '', false));
    this.city = ko.observable('');
    this.state = ko.observable();
    this.province = ko.observable('');
    this.zipCode = ko.observable();

    this.countryLookupID = '';
    this.stateLookupID = '';
}
Address.prototype.clearDomestic = function () { return true; };
Address.prototype.clearInternational = function () { };

function Company() {
    this.legalEntityID = ko.observable(0);
    this.legalEntityName = ko.observable('');
    this.isFemaleOwned = ko.observable(false);
    this.isMinorityOwned = ko.observable(false);
    this.webAddress = ko.observable();

    this.businessPhone = ko.observable();
    this.faxNumber = ko.observable();

    this.locked = ko.observable(false);

    ko.computed(function () {
        var newCountry = this.country();
        if (newCountry) {
            this.countryLookupID = newCountry.id.toString();
            if (newCountry.international) {
                this.clearDomestic();
            }
            else {
                this.clearInternational();
            }
        }
        else {
            this.countryLookupID = "";
        }

    }, this);
    ko.computed(function () {
        var newState = this.state();
        if (newState) {
            this.stateLookupID = newState.id.toString();
        }
        else {
            this.stateLookupID = "";
        }
    }, this);
}
Company.prototype = new Address;
Company.prototype.clearDomestic = function () {
    // Since we are entering this method via Address, we need a reference back to a real company object with self.
    this.businessPhone('');
    this.state(null);
    this.zipCode('');
};
Company.prototype.clearInternational = function () {
    this.province('');
};

newstate newcountry , Address, , , .

+5
1

, , this.base(this); this.base.call(this);? ( ).

+1

All Articles