Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object.defineProperty alternative for IE8

Given javascript code like the following (extracted from a plugin referenced below):

var AutosizeInput = (function () {
    function AutosizeInput(input, options) {
        var _this = this;
        this._input = $(input);
        this._options = options;


    }
    Object.defineProperty(AutosizeInput.prototype, "options", {
        get: function () {
            return this._options;
        },
        enumerable: true,
        configurable: true
    });
}

Full code of the plugin located at: https://github.com/MartinF/jQuery.Autosize.Input/blob/master/jquery.autosize.input.js

From what I read the call to Object.defineProperty will not work on IE8 as this is not a DOM object.

Is that accurate?..and if it is...which would be the best way to rewrite this getters (and setters) to be IE8 compliant?

like image 756
jdrm Avatar asked Jan 16 '14 23:01

jdrm


1 Answers

IE8 does not support getter/setter functions on properties of non DOM objects.

The "solution" here is to not rely on property getters, and use a full getter function instead.

AutosizeInput.prototype.getOptions = function() {
  return this._options;
};

var input = new AutoresizeInput();
input.getOptions();

Or, instead of keeping this._options as an "internal" variable, just drop the underscore allow access directly. This way you need no magic at all.

var AutoresizeInput = function() {
  this.options = {};
}

var input = new AutoresizeInput();
input.options();
like image 126
Alex Wayne Avatar answered Oct 04 '22 02:10

Alex Wayne