2016-08-19 59 views
0

我正在学习javascript原型,但遇到了一个问题。关于JavaScript原型

<script type="text/javascript"> 
     function Person(){} 
     Person.prototype.name="aa"; 
     Person.prototype.sayName=function(){ 
      alert(this.name); 
     } 
     var person1=new Person(); 
     person1.name="bb"; 
     alert(person1.sayName()); 
    </script> 

为什么它返回2个结果。“bb”和undefined?

+0

你从哪里得到_undefined_应该使用? –

回答

0

那是因为你已经创建的person对象和您正在设置 name属性的 为“BB”和你正在做sayname的警报的函数,而不是一个属性,它的功能

详细的解释: 这是你的工厂对象即函数定义

function Person(){} 
     Person.prototype.name="aa"; 
     Person.prototype.sayName=function(){ 
      alert(this.name); 
     } 

现在您创建对象的实例即可使用其属性和功能

var per = new Person(); 

现在使用每则可以覆盖该属性,或者你可以调用

per.name = "bb"; 

上面的代码将设置属性名==“BB”所以提醒您会得到BB访问sayName你应该使用

per.sayName(); 

这会给你的输出“BB”

到sayName功能警报将给予BB,因为这是指对象,然后它会寻找property.name

0

这有什么好做的原型和属性,一切都按预期工作。问题是person1.sayName()没有return什么,所以它暗含返回undefined,这就是alert(…)将打印。

你只想要一个警告,让你无论是

Person.prototype.sayName = function() { 
    return this.name; 
}; 
… 
alert(person1.sayName()); 

Person.prototype.sayName = function() { 
    alert(this.name); 
}; 
… 
person1.sayName();