New演算子原理

原則の新しいオペレータについて:

 

1、リトルレッドブックを説明します:

(1)新しいオブジェクトを作成します

(2)コンストラクタの範囲は、新しいオブジェクトを割り当てます

(3)実行コードコンストラクタ

(4)新しいオブジェクトを返します

 

2、MDNの解釈について:

(1)新しいオブジェクトが作成されるFoo.prototypeから継承

(2)指定されたコンストラクタがfooと呼ばれるパラメータを使用し、これは、新しく作成されたオブジェクトにバインドされています。いかなる呼び出しパラメータなし、すなわち、パラメータが指定されていない新しいフー()、Fooの新しいFooの等価

コンストラクタは、「オブジェクト」を返した場合(3)、そのオブジェクトは、全体の新しい結果が出てくる置き換えます。コンストラクタは、オブジェクトを返さない場合は、新しい結果は、オブジェクトを作成するための手順(1)出てきます

 

3.概要:

new演算子を使用している場合、実際には、これらの3つのことを実行します。

// 创建了一个空对象 obj,并将这个空对象的__proto__成员指向 Foo 函数对象 prototype 成员对象
var obj  = {};
obj.__proto__ = Foo.prototype;

// 将 Foo 函数对象的 this 指针替换成 obj,然后再调用Foo函数
Foo.call(obj);// 判断实例类型是否为对象,是则返回实例,否则返回构造函数
if (typeof obj === 'object') {
    return obj;
} else {
    return Foo;
}

也就是说,函数内部发生了以下变化:

(1)创建一个新对象,并继承构造函数 Foo 的原型对象 Foo.prototype

(2)构造函数 Foo 被执行,执行时传入相应的参数,并将 this 指定为新的实例

(3)判断实例是否为对象,是则返回实例,否则返回构造函数

 

おすすめ

転載: www.cnblogs.com/Leophen/p/11391091.html