JavaScript構文基礎整理#3


オブジェクト向け


生成者


関数の呼び出し時に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は同じです.プロトタイプのオブジェクトには影響しません.