2
var Person = function(name){
    this.name = name;
};
console.log("1 " + typeof(Person.prototype)) //"object" - prototype is a property of a first class functional object

Person.prototype.sayhi = function(){console.log("hi")};

var john = new Person();

console.log("2 "+typeof(Person.sayhi)) // "undefined"
console.log("3 "+typeof(john.sayhi))// "function"

私はjavascriptプロトタイプをよりよく理解しようとしています。

ケース2が未定義を返すのに、ケース3が「オブジェクト」を返すのはなぜだろうか。

他の投稿を読みましたが、答えが見つからないようです。ありがとう。

4

2 に答える 2

1

プロトタイプ()にアタッチされた関数Person.prototypeは、コンストラクター(PersonPerson.sayhiからアクセスできません。つまり、プロトタイプにアクセスしようとはしていません。

コンストラクター(たとえばvar p = new Person())を呼び出すPerson.prototypeと、作成されたオブジェクト()のプロトタイプチェーンにアタッチされます。pそのため、を呼び出すことができますp.sayhi()。ただし、sayhiコンストラクターにアタッチされることはありません

于 2013-02-13T22:06:27.157 に答える
0

「2」のconsole.logがプロトタイプを参照していないため、次のようになります。

Person.sayHi = function() { console.log('I am not in an instance'); }
console.log(typeof(Person.sayHi)); //"function"
var john = new Person();
console.log(typeof(john.sayHi)); //"undefined"

とは異なります:

Person.prototype.sayHi = function() { console.log('Hi'); }
console.log(typeof(Person.sayHi)); //"undefined"
console.log(typeof(Person.prototype.sayHi)); //"function"
var john = new Person();
console.log(typeof(john.sayHi)); //"function"

c#/javaの静的メソッドとインスタンスメソッドの違いの一種

于 2013-02-13T22:07:00.433 に答える