2017-05-11 11 views
2

コンソールが未定義に印刷されます。私のコードで何が間違っていますか?

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を学んだし、私はいくつかのコードで遊んで始めました。このコードを実行すると、コンソールは未定義を出力します。私はコンソールに "Hello animal1"と表示されるはずだと信じています。何が問題なの?

+1

あなたはどう思いますか、あなたの質問に '[回答:以下のスニペットに示すように、それをアクセスしながらだから、常にこのとプロパティを参照する必要があります名前] '正確には? –

答えて

0

新しいと言えば、最初に起こることは空のオブジェクトが作成されるということです。このオブジェクトが作成されると、動物の機能が実行され、現在の実行コンテキストは新しく作成された空のオブジェクトを参照します。したがって、this.name = nameとthis.size = sizeと言うとき、このキーワードは、新しく作成されたオブジェクトを参照することになります。

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();

ホープこれは

+0

ありがとうございます。出来た! –

0

現在のインスタンスを参照するには、thisキーワードを指定する必要があります。

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

console.log("Hello " + [name])私は今それがHello name1を出力し、私のコンソールでそれを試してみましたconsole.log("Hello " + this.name)

でなければなりません。

関連する問題