给出如下的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的最佳方法吗?
答案 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
...
您可以在此处找到其余代码: