2
<html><head><script>
function Pet(){                                        // Base Class
    var owner = "Mrs. Jones";
    var gender = undefined;
    this.setOwner = function(who) { owner=who; };        //1
    this.getOwner = function(){ return owner; }
    this.setGender = function(sex) { gender=sex; }
    this.getGender = function(){ return gender; }
}

function Cat(){}                                       //subclass constructor
Cat.prototype = new Pet();  
Cat.prototype.constructor=Cat;
Cat.prototype.speak=function speak(){
    return("Meow");                                      //2
    };                                                   //3

function Dog(){};                                        //4     
Dog.prototype= new Pet();
Dog.prototype.constructor=Dog;
Dog.prototype.speak = function speak(){
    return("Woof");
    };                                                   //5

</script></head>
<body><script>

var cat = new Cat;
var dog = new Dog;
cat.setOwner("John Doe");
cat.setGender("Female");
dog.setGender("Male");
document.write(
     "<br>The cat is a "+ cat.getGender()+ " owned by "
     + cat.getOwner() +" and it says " + cat.speak());
document.write(
    "<br>The dog is a "+ dog.getGender() + " "
    + " owned by " + dog.getOwner() + " and it says " + dog.speak());
</script></body>
  1. //1上記のコードの、//2//3//4とマークされた行の右中括弧の後にセミコロンがあるのはなぜ//5ですか?
  2. いつ実行さCat.prototype = new Pet();Dog.prototype = new Pet(); ますか。
4

1 に答える 1

2

ええと... JavaScript はそれ自体でコードのどこにもセミコロンを配置しません。スクリプトを書いた人がそうしましたよね? ただし、JavaScript が行っているのは、見逃したスペースにセミコロンを自動挿入することです (コード内ではなく、少なくとも目に見えるものではありません。コードを読み取り、記述時に自動挿入されたセミコロンがあるかのように動作します)。これにより、予期しない結果が生じることがあります。

この素晴らしい記事に記載されているように、各ステートメントの後にセミコロンを使用することをお勧めします。

2 番目の質問を正しく理解できれば、次のようになります
。Javascript は、オブジェクト Pet のプロトタイプに基づいて新しいオブジェクトをインスタンス化します。次に、Cat.prototype がこの新しく作成されたオブジェクトをポイントします。犬の場合も同じことが起こります。

于 2012-09-20T19:01:34.320 に答える