小编Los*_*ace的帖子

IE11错误,Object不支持属性或方法'defineProperty'

好的peep,所以我有这个代码,但这是一个简化版本:

<!DOCTYPE html>
<html>
    <head>
        <title>_</title>
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <script>

            Object.defineProperty(
                Array.prototype,'len',{get:
                    function(){return this.length}
            });

            function pop(){
                ary=['abc',123];
                d1.innerText=ary.len;
            }

        </script>
    </head>
    <body onload="pop()">
        <div id="d1">d1</div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

所以我的设置是:

  1. Chrome v40.0.2214.94 m
  2. IE v11.0.9600.16428
  3. IIS v7.5.7600.16385

当我打开任一浏览器并打开上述文件时:

IE ==> C:\ site\proj\default.htm
Chrome ==> file:/// C:/site/proj/default.htm

两个浏览器都显示正确的结果:2...但是当我打开文件时:

IE ==> http:// portal /proj/default.htm
Chrome ==> http:// portal /proj/default.htm

其中portallocalhost站点的名称,在IIS中进行设置.

IE显示undefined并抛出控制台错误:

对象不支持属性或方法'defineProperty'

虽然Chrome浏览器仍显示2正常.


所以,我想我的问题是......

是否 …

javascript arrays prototype indexof defineproperty

5
推荐指数
1
解决办法
5726
查看次数

未捕获的类型错误:不可变原型对象 '#&lt;Object&gt;' 无法设置其原型

我有一个链接到 .htm 文件的 .js 文件,并且 .js 文件中的唯一代码是以下行:

Object.setPrototypeOf(Object.prototype,{x:616});
Run Code Online (Sandbox Code Playgroud)

在加载 .htm 页面时,“chrome 控制台”显示错误:

Uncaught TypeError: Immutable prototype object '#<Object>' cannot have their prototype set
Run Code Online (Sandbox Code Playgroud)

我以前从未见过此错误,并且无法在此处或在线找到任何相关信息。

我假设该对象已被密封/冻结,因此进行了测试:

console.warn('sealed        ?',Object.isSealed(Object.prototype));      //  false
console.warn('frozen        ?',Object.isFrozen(Object.prototype));      //  false
console.warn('extensible    ?',Object.isExtensible(Object.prototype));  //  true
Run Code Online (Sandbox Code Playgroud)

但这并没有说明问题,因此让我感到困惑。这是有史以来第一次在设置原型时发生这种情况,Object.prototype我是否想知道我的 Chrome 浏览器是否自动更新了新功能或其他什么?

javascript prototype typeerror

3
推荐指数
1
解决办法
632
查看次数

如何在原型工作中得到"this = this"

好的peep's所以我知道弄乱原型是不好的做法,但无论如何......


Array.prototype.rev=
    function(){
        this.reverse();
    }
Run Code Online (Sandbox Code Playgroud)

工作良好!更新源数组变量ary,如预期的那样:

ary = [123, 456];
ary.rev();

// result:  ary == [456, 123]
Run Code Online (Sandbox Code Playgroud)

写一个类似的属性我的问题来了String.

我想做的是这样的......

String.prototype.rev=
    function(){
        this.split('');
        this.reverse();
        this.join('');
    }
Run Code Online (Sandbox Code Playgroud)

看起来很简单吧!拆分字符串,反转它,然后将它连接在一起,这样原来的字符串变量str就像它以前的自身一样,就像ary上面那样!

事情是:虽然this.split()已被调用,但它需要存储为变量,即:

split = this.split('');
Run Code Online (Sandbox Code Playgroud)

这就是this = this问题所在......

现在split已定义,它将重点放在编辑源变量上,并且它不像我在函数末尾所说的那样:

this = split;
Run Code Online (Sandbox Code Playgroud)

this是"不可改变的",或者当它们意味着它是静态的和不可改变的时候是什么?


切入点!我的问题是......

str = 'abc'
Run Code Online (Sandbox Code Playgroud)

我想可以说str.rev()没有str = str.rev(),并得到的结果str = 'cba',其中str === 'cba',明白我的意思?

所有的解决方法和学费都欢迎窥视,我只是问你知道你在说什么.谢谢

javascript reverse prototype this

1
推荐指数
1
解决办法
77
查看次数