2013-10-07 46 views
1


當我們在我們在和Base2庫相結合的項目中使用Phantomjs關閉嚴格模式,我們得到以下錯誤:如何使用Phantomjs

+ phantomjs ...../src/test/javascript/SpecRunner.html 
TypeError: setting a property that has only a getter 

任何人都可以指出如何解決這一問題問題?看起來它是由於Phantomjs內的Javascript「strict mode」引起的(請參考here),但從Phantomjs文檔找不到關於如何關閉它的問題,尤其是因爲它發生在我們需要的外部庫(Base2.js)中?

謝謝
水稻

回答

0

Base2.js似乎並沒有界定 「使用嚴格」。這意味着在你的一個JavaScript文件中,你有任何函數之外的「use strict」行。這會在定義的點打開嚴格模式,並且無法再將其關閉。最好只在函數聲明中打開它。

要找出此問題,請在項目中包含的所有文件中搜索「嚴格使用」或「嚴格使用」。然後移除它們或在功能體內移動它們。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode

Can I disable ECMAscript strict mode for specific functions?

+0

嗨@Emmentaler,你是對的,但我用很多外部庫像角* .js文件,其中包含全球「使用嚴格」的任何功能外線。這意味着要使用你所提出的想法來解決問題,我不僅必須在所有這些外部JS庫之前聲明base2.js,還必須在所有這些在SpecRunner.html中使用Base2的庫之前擴展Base2的類,尷尬,儘管如果沒有其他出路,你可以忍受它。在我擴展Base2的文件的開始處沒有關閉「嚴格使用」的方法嗎? – Paddy

+0

唉,沒有。這是一個已知的問題。問題在於它以這種方式實現,以保持與早期版本的JavaScript的向後兼容性。我討厭它不能像C或C++中的#define一樣工作。在上面的編輯中,我添加了一個類似SO問題的鏈接 –

+0

感謝@Emmentaler,這意味着我們必須生活在聲明所有「非嚴格」的JS文件的尷尬之中。由於它是SpecRunner.html而不是實際的代碼,我想現在至少不是太多的問題。 – Paddy