2017-01-23 4 views
2

私はいつも受け取りますプロパティ 'saySomething'を未定義ののプロパティに設定できません。なぜですか? ここにどこか間違いがありますか?Javascriptのプロトタイプメソッド「プロパティを設定できません」

var Person = new Object(); 

Person.prototype.saySomething = function() 
{ 
    console.log("hello"); 
}; 

Person.saySomething(); 
+0

なぜあなたはプロトタイプを使用しようとしていますか?あなたはクラスを持っておらず、一つのオブジェクトしか持っていないので、メソッドを直接それに割り当ててください: 'Person.saySomething = ...' – Bergi

答えて

5

デバッグのヒント:あなたは未定義のいくつかのプロパティにアクセスしようとすると、この..of undefinedエラーが発生します。

new Object()を実行すると、プロトタイププロパティを持たない新しい空のオブジェクトが作成されます。

私たちはここで何を達成しようとしているのかよく分かりませんが、関数のプロトタイプにアクセスして使用することはできます。

var Person = function() {}; 
 

 
Person.prototype.saySomething = function() { 
 
    console.log("hello"); 
 
}; 
 

 
var aperson = new Person(); 
 
aperson.saySomething();

-1

hereを確認できます。

var Person = function(name) { 
    this.canTalk = true; 
    this.name = name; 
}; 
Person.prototype.greet = function() { 
    if (this.canTalk) { 
    console.log('Hi, I am ' + this.name); 
    } 
}; 

bob = new Person('bob'); 
bob.greet(); 
3

prototypeプロパティは、関数ではなく、インスタンス化されたオブジェクト上に存在します。

var Person = new Object(); 
 
console.log(Person.prototype); // undefined 
 

 
var Person2 = function() {} 
 
console.log(Person2.prototype); // {}

関数のプロトタイプに置く事は(newを使用して)その関数で作成されたすべてのオブジェクトインスタンスで共有されるので、これは便利です。

var Person = function() {}; 
 

 
Person.prototype.saySomething = function() { 
 
    console.log("hello"); 
 
}; 
 

 
console.log(
 
    new Person().saySomething === Person.prototype.saySomething // true. they are the same function 
 
);

あなたが望むすべての人のオブジェクトにメソッドを追加する場合は、プロトタイプのための必要はありません。

var Person = {}; 
 

 
Person.saySomething = function() { 
 
    console.log("hello"); 
 
}; 
 

 
Person.saySomething();

あなたもすることができますオブジェクトリテラル構文を使用:

var Person = { 
 
    saySomething: function() { 
 
    console.log("hello"); 
 
    } 
 
}; 
 

 
Person.saySomething();

関連する問題