控制台打印出undefined。我的代码出了什么问题?

时间:2017-05-11 15:43:56

标签: javascript

function Person(name,age){
  this.name=name;
  this.age=age;
}
var person1 = new Person("name1",4)
  var person2 = new Person("name2",6)
function Animal(name,size){
  this.name=name;
  this.size=size;
}
var animal1=new Animal("name1","small")
var animal2 = new Animal("name2","big")
Person.prototype.sayName=function(){
  console.log("Hello "+[name])
}
Animal.prototype.sayName=function(){
  console.log("Hello "+[name])
}
animal1.sayName();

我刚刚学习了Javascript,我开始玩一些代码。当我运行此代码时,控制台打印出undefined。我相信控制台应该打印:“Hello animal1”。这有什么问题?

3 个答案:

答案 0 :(得分:0)

您必须指定this关键字才能引用当前实例。

Animal.prototype.sayName = function(){
  console.log("Hello "+ this.name)
}

答案 1 :(得分:0)

console.log("Hello " + [name])应为console.log("Hello " + this.name)

我在我的控制台中尝试了它,现在输出Hello name1

答案 2 :(得分:0)

在javascript中,当你说 new 时,首先会发生一个空对象。在创建该对象时,执行动物函数,并且当前执行上下文将引用新创建的空对象。因此,当您说this.name = name和this.size = size时, this 关键字将引用新创建的对象。因此,您需要始终使用引用该属性,同时访问该属性,如下面的代码段所示:

function Animal(name,size){
  this.name=name;
  this.size=size;
}
var animal1=new Animal("name1","small")

Animal.prototype.sayName=function(){
  console.log("Hello "+this.name)
}
animal1.sayName();

希望这能回答你的问题