JavaScript構文基礎整理#3
4151 ワード
オブジェクト向け
生成者
関数の呼び出し時にnewを追加すると、新しいオブジェクトが作成された後に返されます.
オブジェクトを
コンストラクション関数は、通常の関数と区別するために大文字で表されます.
以前
function Person(){}
var p1 = new Person();
p1.name = 'egoing';
p1.introduce = function(){
return 'My name is '+this.name;
}
document.write(p1.introduce()+"<br />");
var p2 = new Person();
p2.name = 'leezche';
p2.introduce = function(){
return 'My name is '+this.name;
}
document.write(p2.introduce());
後.function Person(name){
this.name = name;
this.introduce = function(){
return 'My name is '+this.name;
}
}
var p1 = new Person('egoing');
document.write(p1.introduce()+"<br />");
var p2 = new Person('leezche');
document.write(p2.introduce());
ジェネレータには、オブジェクトのpropertyが定義されています.この作業を初期化と呼ぶ.これにより、コードの再利用性が大幅に向上します.ソース:生活コード
グローバルオブジェクト
グローバルオブジェクトは特殊なオブジェクトです.すべてのオブジェクトは、そのグローバルオブジェクトのプロパティです.
var o = {'func':function(){
alert('Hello?');
}}
o.func();
window.o.func();
オブジェクトが指定されていない場合は、ウィンドウのプロセスとして暗黙的に見なされます.JavaScriptでは、すべてのオブジェクトが基本的にグローバルオブジェクトのプロセスであることがわかります.
ただし、Windowsはブラウザベースであり、ホスト(ex.Node.js)に依存します.
ECMAScriptは、グローバルオブジェクトのAPIを定義します.その他のAPIは、ホスト環境において必要に応じてさらに定義される.たとえば、WebブラウザJavaScriptにはalert()というグローバルオブジェクトのメソッドがありますが、ノードです.jsには存在しません.また、グローバルオブジェクトの名前もホスト環境によって異なります.Webブラウザでは、グローバルオブジェクトはウィンドウですが、ノードです.jsではglobalです.
this
これは、関数で関数を呼び出すコンテキスト(context)を意味します.
関数とオブジェクトの関係がばらばらなJavaScriptでは,両者を結びつける実際の接続点である.
関数呼び出し時(o 1):グローバルオブジェクトとしてのウィンドウと同じです.
newを使用してジェネレータを呼び出すと(o 2)オブジェクトの属するメソッドのthisがそのオブジェクトを示す.
var funcThis = null;
function Func(){
funcThis = this;
}
var o1 = Func();
if(funcThis === window){
document.write('window <br />');
}
var o2 = new Func();
if(funcThis === o2){
document.write('o2 <br />');
}
// window
// o2
作成者を実行する前に、オブジェクトを変数に割り当てることはできません.したがって、そうでなければ、オブジェクトに対してアクションを実行することはできません.function Func(){
document.write(o);
}
var o = new Func();
// 결과 undefined
prototype
オブジェクトにはpropertyがあり、prototypeは特殊なpropertyであり、その用途は約束されている.
プロトタイプに保存されたアトリビュートは、ジェネレータでオブジェクトを作成するときに接続されます.
コメントで誰かが整理したプロトタイプ定義
コンストラクション関数で関数を定義しておくと、オブジェクトを作成するたびに関数が生成され、プログラムのパフォーマンスが低下し、メモリの使用が問題になります.この問題を解決するために,すべてのジェネレータが共有するジェネレータ関数のプロトタイプをprototypeとして定義することができる.プロトタイプは、オブジェクトを作成するたびに実行されるものではありません.一度だけ実行されるため、パフォーマンスとメモリの問題を解決でき、特定の作成者のみを個別に制御できます.特定のジェネレータを制御するときに、ジェネレータに定義済みの関数がある場合は、その関数を実行します.そうでない場合はprototype関数を実行します.
function Ultra(){}
Ultra.prototype.ultraProp = true;
function Super(){}
Super.prototype = new Ultra();
function Sub(){}
Sub.prototype = new Super();
var o = new Sub();
console.log(o.ultraProp);
1.オブジェクトoでultraPropを検索します.2.なければSub.PrototypeUltraPropを探しています.
3.Superがなければ.prototype.UltraPropを探しています.
4.Ultraがなければ.prototype.UltraPropを探しています.
プロトタイプは、オブジェクトとオブジェクトのチェーンを接続する役割です.
この関係をプロトタイプチェーンと呼ぶ.
Super.prototype = Ultra.原型は使えません.これでスーパーPrototypeの値を変更するとUltraになります.プロトタイプも変更されるので.Super.prototype = new Ultra();Ultraです.プロトタイプとしてオブジェクトが作成されるので、new Ultra()で作成されたオブジェクトが変化してもUltraは同じです.プロトタイプのオブジェクトには影響しません.
Reference
この問題について(JavaScript構文基礎整理#3), 我々は、より多くの情報をここで見つけました https://velog.io/@leesg619/javascript-문법-기초-정리-3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol