关于javascript原型的问题

时间:2011-03-23 01:07:39

标签: javascript prototype

<script>  
function ClassA()  
{  
    this.a=function(){alert();};  
}  
function ClassB()  
{  
    this.b=function(){alert();};  
}  
ClassB.prototype=new ClassA();  
var objB1=new ClassB();  
var objB2=new ClassB();  
alert(objB1.a==objB2.a);  
alert(objB1.b==objB2.b);  
</script>

为什么第一个警报是真的而第二个是假的?感谢

2 个答案:

答案 0 :(得分:2)

因为属性“a”不是ClassB实例的直接属性(即objB1.hasOwnProperty(“a”)为false),所以从其原型中读取属性。由于ClassB的所有实例只有一个原型对象,因此objB1.a和objB2.a实际上是指同一个函数,在它们的公共原型对象中定义。 (您可以验证objB1.a===objB2.a)。

但属性“b”被定义为ClassB的每个实例的新函数,并且单独的函数实例彼此不相等。

答案 1 :(得分:0)

Upvoted @ maerics(好)答案,但想要指出可能不明显的事情。在(构造函数)函数内部,this指的是正在创建的新实例。因此,每次调用new ClassAnew ClassB时,都会创建一个新实例,this.athis.b引用分配给新实例化对象的属性的新函数。

所以,看看你的代码,一个问自己的简单问题是:“每种类型的新实例有多少?”

我只看到一次new ClassA(),这意味着只创建了{em>一个 ClassA的实例,因此,只有一个函数被分配给this.a。但是,我看到两个出现new ClassB(),因此,两个新函数被创建,每个实例一个。