用關鍵字new建立物件 new都做了什麼(隨筆)

2021-07-30 07:36:48 字數 949 閱讀 1156

function person () ;

}var person = new person("tom", 21, "web");

console.log(person.name);

使用關鍵字new建立新例項物件經過了以下幾步:

1、建立乙個新物件,如:var person = {};

2、新物件的_proto_屬性指向建構函式的原型物件。

3、將建構函式的作用域賦值給新物件。(也所以this物件指向新物件)

4、執行建構函式內部的**,將屬性新增給person中的this物件。

5、返回新物件person。

var person = {};

person._proto_ = person.prototype; //引用建構函式的原型物件

person.call(person); //將建構函式的作用域給person,即:this值指向person

當採用構造器呼叫模式時,即使用new關鍵字去呼叫乙個函式時,函式執行的方式會被修改。如果new是乙個方法而不是乙個運算子時,它可能會這樣執行:

function.methos("new", function () );

以上**,也可以說明在呼叫new關鍵字時,發生了什麼事,或者說是呼叫new關鍵字建立的新物件經歷了哪些步驟後擁有了函式的特性。

注意:

通過new關鍵字建立某建構函式的新例項物件,就是將原型鏈與例項的this聯絡起來,this指向這個新物件,同時也指向這個建構函式,並且this物件還是這個建構函式的例項。如果沒有使用new操作符,直接用建構函式建立新例項物件,那麼this物件就指向了window物件,不會指向這個新物件的,不管給這個新物件新增什麼屬性,都沒有用,是直接新增到了window物件上了。

手寫 new 關鍵字

function mynew func,args 新物件原型指向建構函式原型物件 obj.proto func.prototype 將建構函式的this指向新物件 let result func.obj,args 根據返回值判斷 return result instanceof object res...

new 關鍵字相關

初始化動態分配的陣列 動態分配陣列時,如果陣列元素具有類型別,將使用該類的預設建構函式 c primer第 2.3.4 節 實現初始化 如果陣列元素是內建型別,則無初始化 string psa new string 10 array of 10 empty strings int pia new i...

new關鍵字 this關鍵字 base關鍵字

使用new,所做的三件事 1.類是引用物件,引用物件是在堆中開闢空間 在堆中開闢空間 2.在開闢的堆空間中建立物件 3.呼叫物件的構建函式 4.隱藏父類成員 子類的成員可以與隱藏從父類繼承的成員,類似於重寫。public new void sayhello this關鍵字的使用 1.代表當前類的物件...