Yesvar fn = function(){};
は Function 型です
test.porototype が空である理由: Object.prototype ではなく Function.prototype であるため
これは何ですか:最後に投稿されたリンクで回答
関数をコンストラクターとして使用して、オブジェクトを作成できます。
var Person = function(name){
this.name = name;
};
Person.prototype.walk=function(){
this.step().step().step();
};
この例では、Person はコンストラクター関数と呼ばれます。これは、次のようなプロパティを与えることができるオブジェクトであるためです。Person.static="somthing"
これは、Person に関連する静的メンバーに適しています。
Person.HOMETOWN=22;
var ben = new Person("Ben");
ben.set(Person.HOMETOWN,"NY");
ben.get(Person.HOMETOWN);//generic get function what do you thing it'll get for ben?
ben.get(22);//maybe gets the same thing but difficult to guess
Person を使用してインスタンスを作成するときは、 new キーワードを使用する必要があります。
var bob = new Person("Bob");console.log(bob.name);//=Bob
var ben = new Person("Ben");console.log(bob.name);//=Ben
プロパティ/メンバーname
はインスタンス固有であり、ボブとベンでは異なります
メンバー walk はすべてのインスタンスで使用できます (bob と ben は Person のインスタンスです)
bob.walk();ben.walk();
walk() が bob (および後に ben) で見つからなかったため、JavaScript は Person.prototype でそれを探します。bob と ben の両方がこれを共有する walk 関数は 1 つだけですが、walk 関数では を使用するため、関数の動作は異なりますthis
。
ベンが赤信号を待っていて、walk を呼び出し、ボブが青信号だった場合walk
、ボブとベンに対してまったく同じことを行いますがthis
、現在のオブジェクト (bob forベンのためのボブとベン)。
ben.walk=22
bob と benwalk
が ben.walk への 22 の割り当てを共有していても、bob.walk には影響しません。これは、そのステートメントがwalk
ben で呼び出されるメンバーを作成し、値 22 を割り当てるためです。bob.walk を要求するとwalk
、bob で見つからないため、Person.prototype.walk 関数が取得されます。ただし、メンバー walk は ben で作成されており、JavaScript が ben で walk を検出したため、Person.prototype を検索しないため、ben.walk を要求すると値 22 が返されます。
そのため、インスタンスでメンバーが見つからない場合、JavaScript エンジンはコンストラクターのプロトタイプを調べます。では、ben.hasOwnProperty はどこで形成されるのでしょうか。インスタンス ben にはありません。Person.prototype にはありません。答えは、プロトタイプチェーンがあり、Person のコンストラクターが Function であるため、hasOwnProperty が ben または Person.prototype で見つからない場合、Person のコンストラクターのプロトタイプ (is Function) を参照します。そこに hasOwnProperty が見つからない場合 (しかし見つけることはできます)、関数のコンストラクターのプロトタイプ (オブジェクトです) を調べます。
Object.create(null,{})
私の意見では悪い考えでない限り、すべては Object.prototype から継承する必要があります。Object.prototype に何かを追加することができ (どちらも良い考えではありません)、JS のオブジェクトは次のことを「継承」します。
Object.prototype.yipee=function(){
console.log("yipeee");
};
22..yipee();//logs yipeee
"hello".yipee();//logs yipee
基本を理解したので、次のことを確認してください。
https://stackoverflow.com/a/16063711/1641941 (最後に「この変数」から始めます)