プロトタイププロトタイプ
- 私たちが作成したすべての関数は、パーサーは、我々はプロトタイプオブジェクトと呼ぶものであるオブジェクトにこのプロパティの対応、関数プロトタイプにプロパティを追加します。
- 通常の関数呼び出しと関数のプロトタイプは効果がありません場合。
- 関数は、関数の形を構築するために呼び出されたときに、彼の作成の目的は、プロトタイプオブジェクトのコンストラクタを指し、暗黙のプロパティを持って、我々は__proto__てプロパティにアクセスすることができます。
- プロトタイプオブジェクトは、同じクラスのすべてのインスタンスは、プロトタイプオブジェクトにアクセスすることができ、オブジェクトがコンテンツに共通の、プロトタイプオブジェクトへの統一された設定することができる、パブリック領域に相当します。
- プロトタイプオブジェクトを見つけるために、ない場合は、直接が使用される場合と、オブジェクトへのアクセスのプロパティまたはメソッドが、それは、最初に自分自身を見つけます。
function MyClass() {
}
// 向MyClass的原型中添加属性a
MyClass.prototype.a = 123;
// 向MyClass的原型中添加方法 fun,同理
MyClass.prototype.sayName = function fun() {
alert('123');
};
var mc = new MyClass();
console.log(MyClass.prototype);
console.log(mc.__proto__);
console.log(mc.__proto__ == MyClass.prototype); // true
console.log(mc.a)
- 後でコンストラクタを作成すると、これらのオブジェクトは、プロパティとメソッドを共有することができ、団結は、各オブジェクトが追加されるため、それは、グローバルスコープに影響を与えませんあなたは、各オブジェクトを作ることができるので、別途ません、プロトタイプオブジェクトのコンストラクタに追加します当社は、これらのプロパティのメソッドを持っています。
- オブジェクトがプロトタイプを持っていない場合場合は、オブジェクトは、プロパティが含まれているかどうかをチェックで使用する、しかし、trueを返します。かどうかのオブジェクトは、属性自体を含むオブジェクトをチェックするためにhasOwnPropertyを()を使用することができます。
console.log("a" in mc)
console.log(mc.hasOwnProperty(“a”));
プロトタイプオブジェクトはオブジェクトなので、それはまた、プロトタイプを持っています。
オブジェクトのプロパティまたはメソッドには、今、自分自身を見つける場合は、あなたがプロトタイプオブジェクトを使用する場合、それは、プロトタイプオブジェクトへのプロトタイプではない場合、それ自体は、プロトタイプオブジェクトを探して行かない、直接の使用を持っています探しています。あなたまで、オブジェクトのプロトタイプオブジェクトを見つけます。オブジェクトのプロトタイプオブジェクトまだオブジェクト内に見つからない場合、未定義が返され、試作品ではありません。
// hasOwnProperty在原型的原型里
console.log(mc.__proto__.__proto.__.hasOwnProperty("hasOwnProperty");