1

誰かが私のコードで間違っていることを解決できますか? 私はまったくの初心者で、オブジェクト、プロトタイプ、およびプロトタイプのコンテキストでこのコマンドが参照するものを作成する方法を実験しようとしているだけです。ただし、私のコードはどれも jFiddle で動作していません。このコードが完全に無意味であることはわかっていますが、オブジェクト、プロトタイプ、コンストラクター、および「this」キーワードがどのように機能するかをより具体的に把握するために、さまざまなケースでドキュメントが出力するものを見つけようとしています。しかし、何も表示されません。

function Person(identity) {
    this.identity = "fellow";
    this.logYou = function() {
        document.write('hi');
    };
};
Person.prototype.logMe = function() {
    document.write(this.identity);
};

var Dude = new Person("stud");

Person.logYou();  
Person.logMe();
Dude.logMe();

</p>

4

4 に答える 4

2
function Person() {
  this.identity = "fellow";
  this.logYou = function() {
    document.write('hi');
  };
};

キーワードを呼び出すとthis.identity = "fellow";、関数が実行されているコンテキストが参照されます。 したがって、グローバル スコープで関数を呼び出すと、オブジェクトが参照されます。this
thiswindow

Person();
alert(window.identity); // fellow

関数をインスタンス化すると、thisキーワードは新しいオブジェクトを参照します。

var Dude = new Person();
alert(Dude.identity); // fellow

したがって、関数Personにはプロパティがありませんidentity
関数にいくつかのプロパティが必要な場合:

Person.identity = "fellow";
alert(Person.identity); //  fellow
于 2012-09-01T18:09:32.820 に答える
1

logYoulogMeは のプロトタイプに格納されているメソッドでありPerson、継承するオブジェクトがその関数を呼び出すことができるようにします。呼び出すことはできませんが、できるlogYouことはその子で呼び出すことです:PersonDude

Dude.logYou(); // hi
Dude.logMe(); // fellow
于 2012-09-01T17:53:49.093 に答える
1

この2行

Person.logYou();   
Person.logMe(); 

logYouおよびlogMeのプロパティとして存在しないため、エラーをスローしてコードの実行を停止させますPerson

Dude.logMe()とが機能し、それぞれとDude.logYou()が印刷されます。fellowhi

于 2012-09-01T17:54:12.103 に答える
1

通話できません

Person.logYou();  
Person.logMe();

Person にはメソッドlogYouorがないlogMeため、これらの 2 行を削除すると、コードが機能し始めます

于 2012-09-01T17:54:20.123 に答える