まず:同じポイント機能、コンストラクタとの違いを理解するためにどのように?
- コンストラクタは通常の関数であり、通常の関数を作成する方法は、コンストラクタの最初の文字大文字に習慣ことを除いて、違いはありません。
- コンストラクタと通常の関数の違いは、コンストラクタの必要性がコールに新しいキーワードを使用しながら、通常の関数は、直接呼び出され、さまざまな方法が呼び出されます。
例えば:人はコンストラクタ関数と人を作成します
//普通函数
function person(name , age ,gender){
//创建一个新的对象
var obj = new Object();
//向对象中添加属性
obj.name = name;
obj.age = age;
obj.gender = gender;
obj.sayName = function(){
alert(this.name);
};
//将新的对象返回
return obj;
}
//普通函数的调用
var obj = person("蜘蛛精",18,"女");
console.log(obj);
//构造函数
function Person(name , age , gender){
this.name = name;
this.age = age;
this.gender = gender;
this.sayName = function(){
alert(this.name);
};
}
// 构造函数的调用
var per = new Person("猪八戒",28,"男");
console.log(per);
- 通常の関数によって作成されたオブジェクトは、独自のインスタンスのコンストラクタによって作成されたオブジェクトのオブジェクトのインスタンスであるが、すべてのオブジェクトは、オブジェクトの子孫です。
例:上記の例の結果は図のコンソール出力を見て
4.場合、関数呼び出しの形で、これはウィンドウであり、フォームのコンストラクタで呼び出された場合、これは、新しく作成されたオブジェクトです。
//普通函数
function fn() {
console.log(this) //输出的是window
}
//普通函数的调用
var obj = fn()
//构造函数
function Function() {
console.log(this) //输出的是Function
}
//构造函数的调用
var Fn = new Function()
第二:プロトタイプとプロトタイプチェーンとの関係
I、プロトタイプに:
- 私たちが作成したすべての機能は、パーサは関数プロトタイプにプロパティを追加し、オブジェクトへのprototypeプロパティますが、この関数のプロトタイプであるオブジェクトは、我々はプロトタイプにそれを呼び出すことができます。
- 関数はプロトタイプオブジェクトのコンストラクタを指して、関数は、それが暗黙のプロパティを持つことになります作成したコンストラクタオブジェクトと呼ばれている任意の効果を持っていない通常の関数のプロトタイプとして呼び出された場合、我々は__proto__することができプロパティへのアクセス。
- プロトタイプオブジェクトは、公共エリアに相当し、同じクラスのすべてのインスタンスは、プロトタイプオブジェクトにアクセスすることができ、我々はコンテンツをターゲットにすることができ、プロトタイプオブジェクトへの統一セット共通しています。
第二に、プロトタイプチェーンに:
- プロトタイプオブジェクトは、それはまた、プロトタイプを持っているので、直接の使用は、その後、存在する場合、プロトタイプオブジェクトがある場合、その後、見つけるために、プロトタイプオブジェクトに行っていない場合、我々は、オブジェクトのプロパティやメソッドを使用する場合、今、中に自分自身を自分自身を見つけるでしょう、オブジェクトでありますそして、このように鎖状構造を形成し、プロトタイプの試作品を見つけるために行かない場合、我々はプロトタイプチェーンを呼び出し、使用されています。
- プロトタイプチェーンは、最上位のオブジェクトオブジェクトのプロトタイプで、オブジェクトのプロトタイプオブジェクトは、オブジェクトのプロパティやメソッドを使用している場合、プロトタイプチェーンは、常にまだ未定義オブジェクトのプロトタイプは、返された見つけることができませんでした、オブジェクトのプロトタイプを見つけることができません、プロトタイプではありません。
いわゆるプロトタイプチェーンは、実際鎖構造のプロトタイプオブジェクトのプロトタイプオブジェクトで構成されています。
第三に、役割のプロトタイプ:
- あなたはコンストラクタを作成すると、オブジェクトはプロパティとメソッドを共有することができ、団結は、各オブジェクトが追加されるため、それは、グローバルスコープに影響を与えませんあなたは、各オブジェクトを作ることができるので、別途ません、プロトタイプオブジェクトのコンストラクタに追加しますこれらのプロパティとメソッドを持ちます。
第四には、オブジェクトをチェックする方法を単一のプロパティが含まれています
- オブジェクトは、プロパティが含まれていますが、オブジェクトがプロトタイプを持っていない場合は、trueを返すかどうかをチェックするときに使用で
console.log("属性名" in 对象名);
第五に、オブジェクト自体は、特定のプロパティが含まれているかどうかをチェック
- オブジェクトは、このメソッドを使用して、オブジェクト自体に含まれる属性がtrueを返す場合にのみ、属性自体を含むオブジェクトをチェックするためにhasOwnPropertyを()を使用することができるかどうか
console.log(对象名.hasOwnProperty("属性名"));
プロトタイプオブジェクトのコンストラクタの中で第三に、機能、
- 通常の関数プロトタイプオブジェクトは、プロトタイプオブジェクトコンストラクタのプロトタイプオブジェクトは、オブジェクトプロトタイプオブジェクトであり、オブジェクトのプロトタイプオブジェクトです。コンストラクタ関数または外観は、出力を例示しました。
**注:**スクリーンショットの中constructorプロパティを通じて、我々はプロトタイプオブジェクトConstructorオブジェクト、および人のプロトタイプオブジェクトが配置されているデフォルトコンストラクタコンストラクタにconstructorプロパティポイントの正常な機能に、デフォルトコンストラクタのプロパティポイントを見ることができます。