1
<script>     
  var Kevin = function(){   
       this.name = 'kevin'
  }          
  Kevin.prototype.getKevin = function(){          
       alert(this.name);        
  }            
  Kevin.prototype.getKevin();

  function John(){
     this.name = 'john'
  }      
  John.getStaticJohn = function(){
     alert(this.name);    
  }

  John.prototype.getJohn();
  John.getStaticJohn();

</script>
  1. undefinedプロトタイプを使用してメソッドを呼び出すときに、両方のケースで取得しているのはなぜですか。
  2. John クラスで静的メソッドを呼び出そうとすると、出力が完全に出力されます。
4

2 に答える 2

4

コンストラクターからメソッドを呼び出したい場合は、匿名インスタンスを作成する必要があります。

(new Kevin).getKevin(); // or new Kevin().getKevin()
于 2012-12-29T23:55:05.590 に答える
2

undefinedプロトタイプには「名前」プロパティがないため、取得しています。また、「getStaticJohn()」への呼び出しは実際には「完全に機能する」わけではないことに注意してください。関数オブジェクト「John」の「name」プロパティにアクセスしているため、大文字の「J」で「John」に警告します。

の式でメソッドを呼び出すと、関数内のsomething.functionNameの値thisは常に の値になりますsomething。したがって、あなたが呼び出すとき

John.prototype.getJohn();

this「getJohn()」関数内の値は でありJohn.prototype、「John()」コンストラクターによって構築されたインスタンスではありません。

これを追加すると:

John.prototype.name = "John's prototype";

を呼び出すと、John.prototype.getJohn()以外のアラートが表示されますundefined

于 2012-12-29T23:55:44.220 に答える