共通関数
メソッド内の this:windowでFunc関数を実行します。
function Func(name, age) {
//=>this:window
this.name = name;
this.age = age;
}
let f1 = Func(' ', 10);
console.log(f1); //=>undefined 戻り値のない関数には戻りがないからだ。
console.log(window.name, window.age); //=>チャン・サン 10
let f2 = Func(' ',30);
console.log(f2); //=>undefined 戻り値のない関数には戻りがないからだ。
console.log(window.name, window.age); //=>李斯30
コンストラクタ
ES3構文の場合: new function() => この方法は、コンストラクタの実行方法に基づいています。
1.Funcは通常の関数ではなく、コンストラクタと呼ばれるようになりました。
2.返り値はRETURNに基づいて決定されなくなり、返り値は現在のクラスのインスタンスになります。
3.カスタムクラスを作成し、クラスのインスタンスを作成したい場合、"関数 "の実行ではなく、コンストラクタの実行、つまりメソッドがクラスと呼ばれ、戻り結果がクラスのインスタンスと呼ばれるように実行すればよいのです;
function Func(name, age) { //コード実行、インスタンスオブジェクトを生成 //thisがインスタンスオブジェクトを指すようにする //=>this.xxx=xxx は全てインスタンスオブジェクトのインスタンスオブジェクトのプライベートプロパティとメソッドを設定します。10は、メソッドの属性名として thisを探すのと同じです /2.newは、作成されたクラスFuncのインスタンスを探すのと同じです。', 10);//{name:'ZhangSan',age:10} です。
//Li Siはプロパティ名としてメソッド thisを探すのと同じです。10もプロパティ名としてメソッド thisを探すのと同じです。f2 = new Func('Li Si', 30);//{name:'Li Si',age:30} console.log(f1);//f1関数そのもの console.log(f2);//f2関数そのもの //FALSE 新しいインスタンスが生成されるたびに、それぞれのインスタンスと他のインスタンスは別のオブジェクトになります。互いに衝突しません console.log(f1 === f2);
コンストラクタ演習
従来の規範:クラス名の最初の文字は一般的に大文字です。
1.コンストラクタの実行は、通常の関数の特性上、プライベートコンテキストにいくつかのプライベート変数があるかもしれませんが、これらのプライベート変数とインスタンスは、必ずしも thisのプライベートコンテキストに関連していないインスタンスですので、唯一の書き込み this.XXX=XXXはインスタンスにプライベート属性を設定する唯一の操作です;
2. インスタンスのプライベートプロパティとコンテキストのプライベート変数は同じものではありません。
3.現在のクラスの各インスタンスは個別のオブジェクトであり、インスタンスは互いに独立しています。
4.コンストラクタの本体では、this.XXX=XXXに基づいてインスタンスに設定されるプロパティとメソッドはプライベートであり、他のインスタンスのものと競合しません。
通常の関数とコンストラクタの違い
1、括弧のない普通の関数は関数そのもの、括弧を加えたものは関数の実装
2、コンストラクタの場合は、括弧なしで、つまり、参照を渡すことはありませんが、リターンが付属しています。
/*
- 凡関数
- .hasOwnProperty(
- Fn()関数の実行
- コンストラクタ
1.オブジェクトのプロパティ
- new Fn; コンストラクタの実行 => 引数なしのnew */
function Fn() { this.x = 100; this.y = 200; }.
let f1 = new Fn(); console.log(f1);
let f2 = new Fn; console.log(f2);
データ型の検出
instanceof: 現在のインスタンスがこのクラスに属しているかどうかを検出します。
1. クラスをインスタンス化した値
2. そのインスタンスであれば TRUE を返し、その逆であれば FALSE を返します。
4.アプリケーションシナリオ:オブジェクト内の特殊なデータ形式、例えば配列や通常の
現在のプロパティが以下のインスタンスであるかどうかを検出します。
1. hasOwnProperty: 現在のプロパティがインスタンスのプライベートかどうかを検出します。
- 1. object.hasOwnProperty(プロパティ)
- 2. プライベート・プロパティである場合は TRUE を返し、そうでない場合は FALSE を返します。
- in: この演算子は、現在のプロパティがオブジェクトのプロパティであるかどうかも検出します。
1.オブジェクトの属性
2.オブジェクトの属性がTRUEである限り
// 現在のプロパティの1つがインスタンスであるかどうかを検出 console.log(f1.hasOwnProperty('say'));//=>true // このプロパティすら持っていないから console.log(f1.hasOwnProperty('name')); //=>false //=> toStringはf1のオブジェクトのプロパティでなければなりません。toStringはf1のオブジェクトのプロパティでなければなりません。そうでなければ、f1はこのメソッドを呼び出すことができません。hasOwnProperty('toString')); //=>false
console.log('say' in f1); //=>true console.log('toString' in f1); //=>true console.log('name' in f1); //=>false
プロパティが現在のオブジェクトのパブリックプロパティであるかどうかの検出
要件:プロパティが現在のオブジェクトのパブリックプロパティであるかどうかを検出すること
ATTRがOBJのパブリック・プロパティであるかどうかの検出