使用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 在堆記憶體中開闢空間,分...