1

私はOOPベースのJavaScriptを初めて使用します。テストの目的で、次のスニペットを作成しました。4つのボタンを作成しました。各ボタンをクリックすると、さまざまな機能が表示されます。いずれかのボタンを初めてクリックすると、予測された結果が得られます。いずれかのボタンを2回クリックすると、次のエラーが発生します。

classFunction = new classFunction();

私が使用したコードは次のとおりです。

<html>
  <head>
    <script type="text/javascript">
      var classFunction;

      function classFunction() {
        this.publicVariable = 'Public Varibale';
        var privateVariable = 'Private Variable';

        this.publicMethod = function () {
          alert('Public Method');
        }

        function privateMethod() {
          alert('private Method');
        }

        return this;
      }

      function privateVariable() {
        classFunction = new classFunction();
        alert(classFunction.privateVariable);
      }

      function publicvariable() {
        classFunction = new classFunction();
        alert(classFunction.publicVariable);
      }

      function privateFunction() {
        classFunction = new classFunction();
        classFunction.privateMethod();
      }

      function publicFunction() {
        classFunction = new classFunction();
        classFunction.publicMethod();
      }
    </script>
  </head>

  <body>
    <input type="button" value="Private Variable" onclick="privateVariable()" />
    <input type="button" value="Public Variable" onclick="publicvariable()" />
    <input type="button" value="Private Function" onclick="privateFunction()" />
    <input type="button" value="Public Function" onclick="publicFunction()" />
  </body>
</html>

新しいオペレーターが2度目に働かない理由はありますか?

4

2 に答える 2

1

classFunction名前を変数名として再利用して、コンストラクター関数を上書きしています。標準では、JS は次のようにコンストラクター関数を大文字にする ClassFunctionことです。

于 2012-07-26T11:00:56.920 に答える
1

その理由は、変数名とコンストラクター名が同じであるためです。したがって、新しいインスタンスを初めて作成して変数に割り当てると、クラスはインスタンスで上書きされます。

以下に別の名前を付けてください。

var classFunction; 
function classFunction()
于 2012-07-26T11:01:31.960 に答える