【问题标题】:Assignment to read-only properties is not allowed in strict mode IE11在严格模式 IE11 中不允许分配给只读属性
【发布时间】:2016-10-04 11:50:03
【问题描述】:

IE11 告诉我var self = this 是一个只读变量...但是在它的声明点之后我没有为它分配任何东西。唯一的变量是变化的高度。尽管如此,我可以在使用var时更改它

'使用严格';

    var onDocumentLoad = require('fe-client-utils/src/dom/onDocumentLoad');
    var onOrientationChange = require('fe-client-utils/src/dom/onOrientationChange');

    var faPageHeight = function () {

    };

    var FA = {
        init: function () {
            this.faAddons = document.querySelector('.fa-addons');
            this.faFooter = document.querySelector('.fa-footer');
            this.extraWideChild = document.querySelector('.extraWide > div');
            this.extraWide = document.querySelector('.extraWide');
            this.faPages = document.querySelector('.fa-pages');
            this.pageContent = document.getElementById('page-content');
            this.faPageItems =  document.querySelectorAll('.fa-page');
            this.moveElements();
            this.faPageHeight();
        },
        faPageHeight: function () {
            var height = 0;
            var self = this;

            Object.keys(self.faPageItems).forEach(function (item, index) {
                height += self.faPageItems[item].offsetHeight;
            });

            height += 150;
            this.extraWideChild.style.height = height+'px';
        },
        moveElements: function () {
            this.faAddons.style = '';

            this.pageContent.appendChild(this.faAddons);
            this.pageContent.appendChild(this.faFooter);

            this.faFooter.style.display = 'block';
        }
    }

    onDocumentLoad(function () {
        FA.init();
    });

    onOrientationChange(function () {
        FA.faPageHeight();
    });

我收到以下错误SCRIPT5045: Assignment to read-only properties is not allowed in strict mode

根据Microsoft,您应该无法重写只读属性。我不相信我是。那么为什么我会收到错误消息?

  • 只读属性
  • 写入只读属性
  • SCRIPT5045:在严格模式下不允许分配给只读属性
  • JavaScript
  • var testObj = Object.defineProperties({}, { prop1: { value: 10, writable: false // by default }, prop2: { get: function () { } } }); testObj.prop1 = 20; testObj.prop2 = 30;

【问题讨论】:

  • 你确定这是导致错误的行吗?我无法复制它
  • 有趣。我将使用完整文件更新问题。我想知道是否将其全部封装在一个对象中是原因
  • 一个最小的、完整的和可验证的代码示例来证明这个问题会更好
  • 很可能是 'self' 是 IE11 Strict 中的保留字 - 尝试将其更改为 'myself' 或 'currElm' 看看会发生什么。

标签: javascript internet-explorer internet-explorer-11 use-strict


【解决方案1】:

这是我最不想解决这个问题的事情。我也按照 cmets 的建议相信它是 self var,因为它是保留的。

然而,打破它的那条线是:

this.faAddons.style = '';

IE 建议的行无关。

当然,我设置它是为了删除属性,而不是仅仅将其设置为空白。

this.faAddons.removeAttribute('style')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2017-11-15
    • 2022-08-20
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 2012-05-05
    相关资源
    最近更新 更多