JavaScript - 创建派生类

问题描述 投票:2回答:1
<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. 在上面的代码中,在标记为qazxsw poi,qazxsw poi,qazxsw poi,//1//2的行中,在结束花括号后,为什么会出现分号?
  2. 什么时候//3//4将被执行。
subclass derived-class
1个回答
1
投票

嗯...... JavaScript不会在你的代码中将分号放在任何地方,编写脚本的人就是这样,对吧?然而,JavaScript做的是在你错过的空格中自动插入分号(不是在你的代码中,至少不是明显的。它会读取你的代码,然后它的行为就好像你在编写它时那些自动插入的分号一样)。这有时会产生意想不到的结果。

我建议在每个声明后使用分号,如这个伟大的//5所述。

如果我正确理解你的第二个问题,那就是这样的: Javascript基于对象Pet的原型实例化新的Object。然后将Cat.prototype指向这个新创建的对象。在Dog的情况下也会发生同样的事情。

© www.soinside.com 2019 - 2024. All rights reserved.