javascriptのnew操作子

1294 ワード

new
演算子はどのようなことをしましたか?
1.新たにオブジェクトを生成しました.2.原型にリンクしました.3.バインディングthis 4.新しいオブジェクトを返します.
自分でnewを実現します.
function create() {
    //         
    let obj = new Object()
    //       
    let Con = [].shift.call(arguments)
    //      
    obj.__proto__ = Con.prototype
    //    this,      
    let result = Con.apply(obj, arguments)
    //    new        
    return typeof result === 'object' ? result : obj
}
インスタンスオブジェクト
実例の対象としては、newによって生成されるものであり、Fnction Foo()であれ、let a={b:1}であれ.オブジェクトを作成するには、文字どおりにオブジェクトを作成することが推奨されています.new Object()を使ってオブジェクトを作成するには、作用ドメインチェーンを介してObjectを次々に見つける必要がありますが、文字どおりの方法を使うと大丈夫です.
function Foo() {}
// function       
//       new Function()
let a = { b: 1 }
//              new Object()
newには演算子優先度に注意が必要です.
function Foo() {
    return this;
}
Foo.getName = function () {
    console.log('1');
};
Foo.prototype.getName = function () {
    console.log('2');
};

new Foo.getName();   // -> 1
new Foo().getName(); // -> 2
new Foo()の優先度はnew Fooより大きいので、上記のコードに対してこのようにして実行順序を分けることができます.
new (Foo.getName());
(new Foo()).getName();
最初の関数については、まずFoo.getName()を実行したので、結果は1である.後者の場合は、まずnew Foo()を実行してFoo上のgetName関数をプロトタイプチェーンで見つけたので、結果は2である.