0

基本的な JavaScript で問題が発生しています。

function tank(){
    this.width = 50;
    this.length = 70;
}

function Person(job) {
    this.job = job;
    this.married = true;
}
var tank1 = tank();
console.log(tank1.length);  //returns: Uncaught TypeError: Cannot read property 'length' of undefined

var gabby = new Person("student");
console.log(gabby.married);  //returns: true

最初の console.log は機能しませんが、2 番目の console.log は機能します。私は JavaScript の初心者であり、長さプロパティが定義されていない理由について途方に暮れています。何か助けはありますか?

4

2 に答える 2

10

newキーワードを逃しました:

var tank1 = new tank();
于 2013-05-29T03:45:05.803 に答える
1

tank() を実行すると、関数の実行コンテキストはwindowオブジェクトになります。あなたがしていることは、window オブジェクトに「幅」と「長さ」のフィールドを追加することです。これは、呼び出し後に実行するwindow.lengthと確認できます。値 70 と 50 が表示されます。関数は値を返さないため、ステートメントは実質的に に設定され、エラーが発生します。window.widthtank()tankvar tank1 = tank();tank1undefined

2 番目のステートメントでは、Personコンストラクターを呼び出しているため、function Person(job) {...}実行時には、作成中のオブジェクトthisへの参照になります。Personこのnewステートメントは次のことを行います。

  1. オブジェクトを作成しPersonます。
  2. コンストラクタ " " を呼び出し、作成したばかりのオブジェクトへの参照をfunction Person(...)設定します。this
  3. Person関数が戻った後、呼び出し元に新しいオブジェクトを返します。

実行コンテキストの詳細については、こちらを参照してください。

于 2013-05-29T04:10:19.103 に答える