2016-12-01 120 views
1

我想弄清楚供应商似乎有一个问题正在纠正的应用程序中的一个非常随机的错误,所以这是一个问题,以帮助我了解可能导致不同情况这个问题在一个JS世界。权限被拒绝的设置变量

这是被报道的“权限被拒绝”

线的基于JavaScript错误的问题,只是设置为false的变量。

<script LANGUAGE="JavaScript" for='tdNote' event='onclick'> 
    if (this.firstChild.src.indexOf('icon_blank.gif') != -1) return; 
    if(mbInNoteClick || mbInGridClick) return; 

    mbInNoteClick = true; 
    onGridClick(this.parentElement.rowIndex); 
    onNoteIconClick(this.parentElement.rowIndex); 
    mbInGridClick = false; //THIS LINE IS REPORTED AS PERMISSION DENIED 
    mbInNoteClick = false; 
    window.event.cancelBubble = true; 
</script> 

包含此代码的页面没有此变量,所以我假设这是全局设置的地方。 (大型应用程序)

如果它在if语句中可访问,什么情况会在尝试设置变量时导致权限被拒绝?

+0

这是什么情况?你在哪里看到这个错误,在错误控制台? –

+0

它是否在if语句中可用?当然,获取和设置价值之间存在差异。 – krillgar

回答

1

的属性是不变或标记为不变,主要是它的意思,因为它是这样定义的非可写属性:

Object.defineProperty(myObject, "a", { 
    value: 4, 
    writable: false, // not writable! 
    configurable: false, // not configurable! 
}); 

从JS主凯尔·辛普森在他的书: “你不知道这JS-对象&原型”

有一个微妙的例外意识到:即使属性是 已经configu rable:false,可写总是可以从真 更改为false而没有错误,但如果已经是false,则不会返回true。

if条件代码正在读取它,这就是为什么您有阅读权限。

还有其他方法来声明属性的权限,如:对象。 preventExtensions,Object。 密封,对象。 冻结

+0

好吧,我开始挖掘源代码,并发现它在一个正常的时尚'var mbInGridClick = false;声明的包含的.js文件中。'所以这仍然可以修改为不可写入其他地方? – Tsukasa

+0

是的,它可能是。 –