2

コードは次のとおりです。

(function() {
    /*global casper:true */
   "use strict";

   this.run = function(casper) {
       // code test here
   };

   this.run(casper);
})();

casperjs test myfile.js戻り値 :

TypeError: 'undefined' is not an object (evaluating 'this.run = function(casper) {

   }')
#    type: uncaughtError
#    error: "TypeError: 'undefined' is not an object (evaluating 'this.run = function(casper) {\n       \n   }')"

「usestrict」を削除すると、単にハングします(このテストは不完全であるため、予期される動作です)。厳密な使用法について理解していないルールがあると思いますが、返されたエラーはそれを明確にしません。

4

2 に答える 2

3

strictモードでthisは、グローバルオブジェクト(strictモードがない場合)ではなく、そのようなイミディエート関数内で未定義になります。コードを機能させる1つの方法は、グローバル変数を明示的に作成することです(それが探している場合)。

window.run = function(casper) {
    // code test here
};
window.run(casper);

または、グローバルを探していない場合は、メソッドをローカルで宣言するだけです。

var run = function(casper) {
    // code test here
};

run(casper);
于 2013-02-04T14:55:30.020 に答える
1

厳密モードでは、「this」はオブジェクトのメソッドではない関数では無効です。非厳密モードでは、「これ」はあなたのようなグローバル関数の「ウィンドウ」を指します。

于 2013-02-04T14:55:36.357 に答える