コンストラクターの「厳密な」をプロトタイプメソッドに拡張しますか?

StackOverflow https://stackoverflow.com//questions/24035111

  •  21-12-2019
  •  | 
  •  

質問

「厳密」の定義がコンストラクタのプロトタイプメソッドに及ぶかどうかを把握しようとしています。例:

var MyNamespace = MyNamespace || {};

MyNamespace.Page = function() {

    "use strict";

};

MyNamespace.Page.prototype = {

    fetch : function() {

        // do I need to use "use strict" here again?

    }

};
. mozilla に従って、

function strict(){

    "use strict";

    function nested() { return "And so am I!"; }

    return "Hi!  I'm a strict mode function!  " + nested();

}
.

プロトタイプメソッドがコンストラクタから厳密なモードを継承することを意味しますか?

役に立ちましたか?

解決

いいえ。

厳密モードはすべての子孫(読み取り:入れ子)スコープに拡張されますが、fetch関数が作成されていないため、内部のコンストラクタは継承されません。各プロトタイプメソッドのディレクティブを繰り返す必要があります。

コントラストの特権メソッドは、コンストラクタが厳密モードにあるときに厳密なモードになります。あなたのケースの繰り返しを避けるために、あなたは

  • a)プログラム全体をスクリプトの最初の行に移動させることで、または
  • に厳密にします。
  • b)あなたのクラスをモジュールIifeに包み、その厳密なものを作ります:

    … = (function() {
        "use strict";
    
        function Page() {
            // inherits strictness
        }
        Page.prototype.fetch = function() {
            // inherits strictness
        };
        return Page;
    }());
    

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top