2016-12-01 181 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

是的,它可能是。 –