IE8的Object.defineProperty替代方案

时间:2014-01-16 23:48:21

标签: javascript jquery jquery-plugins internet-explorer-8

给出如下的javascript代码(从下面引用的插件中提取):

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
    });
}

该插件的完整代码位于:https://github.com/MartinF/jQuery.Autosize.Input/blob/master/jquery.autosize.input.js

根据我的内容,对Object.defineProperty的调用不适用于IE8,因为它不是DOM对象。

这是准确吗?..如果是......这将是重写此getter(和setter)以符合IE8的最佳方法吗?

2 个答案:

答案 0 :(得分:8)

IE8不支持非DOM对象属性的getter / setter函数。

"解决方案"这里不依赖于属性getter,而是使用完整的getter函数。

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

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

或者,不要将this._options保留为"内部"变量,只需删除下划线即可直接访问。这样你根本不需要任何魔法。

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

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

答案 1 :(得分:2)

您可以创建自己喜欢的内容

 if (!Object.defineProperty) {
            Object.defineProperty = function (obj, prop, descriptor) {
                if (arguments.length < 3) { // all arguments required
                    throw new TypeError("Arguments not optional");
                }

                prop += ""; // convert prop to string
                ...     

您可以在此处找到其余代码: