js中new乙個物件的過程

2021-10-01 22:12:09 字數 1511 閱讀 8215

使用new關鍵字呼叫函式(newclassa(…))的具體步驟:

1. 建立空物件;

var obj = {};

2. 設定新物件的constructor屬性為建構函式的名稱,設定新物件的__proto__屬性指向建構函式的prototype物件;

obj.__proto__ = classa.prototype;

3. 使用新物件呼叫函式,函式中的this被指向新例項物件:

classa.call(obj);  //{}.建構函式();          

4. 將初始化完畢的新物件位址,儲存到等號左邊的變數中

注意:若建構函式中返回this或返回值是基本型別(number、string、boolean、null、undefined)的值,則返回新例項物件;若返回值是引用型別的值,則實際返回值為這個引用型別。

var foo = "bar";

function

test ()

new test();         //

test中的this指新物件,並未改變全域性的foo屬性

console.log(this.foo); //

"bar"

console.log(new test().foo); //

"foo";

優先順序問題:

優先順序由高到低:小括號(***) ---> 屬性訪問.  ---> new foo() ----> foo()

function

getname()

function

foo() ;

return

this;}

foo.getname = function

() ;

//先從.屬性訪問符號開始往前面找乙個最近的物件,同時注意new foo()優先於foo();

var a=new foo.getname();//

3;===new (foo.getname)();返回foo.getname型別的例項

var b=new foo().getname();//

2;===(new foo()).getname();返回undefined

var c=new

new foo().getname();//

2;===new (new foo().getname)();返回foo.getname型別的例項

new date().gettime();//===((new

date()).gettime)()

(new

date).gettime();

new date.gettime();//

uncaught typeerror: date(...).gettime is not a function;===new (date.gettime)()

js中new乙個物件的過程

使用new關鍵字呼叫函式 newclassa 的具體步驟 1.建立空物件 var obj 2.設定新物件的constructor屬性為建構函式的名稱,設定新物件的 proto 屬性指向建構函式的prototype物件 obj.proto classa.prototype 3.使用新物件呼叫函式,函式...

js 建立 new 乙個物件的過程

1 物件字面量的方式 let o 2 通過object.create let o object.create 3 通過new 建構函式的方式 let o new object function person name person.prototype.getname function var obj...

new乙個物件的過程

class a public void a string name,int age class b 執行順序 1 因為new用到了 a.class,所以會先找到a.class檔案並載入到記憶體中 2 執行該類中的static 塊,如果有的話,給a.class類進行初始化。3 在堆記憶體中開闢空間,分...