2017-05-08 43 views
1

請問我是javascript世界的初學者,我停止研究關鍵字new指向新創建的對象,讓我們寫一些代碼,然後問我的問題。新關鍵字如何強制此關鍵字指向JavaScript中新創建的對象?

function Employee(name) { 
    this.name = name; 
} 

var x = new Employee("youhana"); 

如何被迫this關鍵字指向儘管表達x對象new關鍵字沒有到達終點,我的意思是

var x = new Employee("youhana"); 

首先,=操作將等待到年底new Employee("youhana");的表達式評估結束,那麼它將分配這個表達式的最終值,並將它放到x這將成爲對象, 另一個例子:

所述 表達的
+2

可能重複[新操作符在JavaScript中如何工作?](http://stackoverflow.com/questions/6750880/how-does-the-new-operator-work-in-javascript) –

+1

@ J.Titus:我打開了尖銳的問題,它沒有回答我的問題,如果你修改了尖銳的問題,你會發現它沒有簡要描述那裏的第1步,因爲他寫道,新的將指向只是新的對象,並沒有如下所述清楚地寫出步驟。 – youhana

回答

2

訂購:

1)一個新的空對象是使用Constructor.prototype作爲原型創建

x=Object.create(Employee.prototype); 

2)構造函數被調用時,結合新的對象因爲這樣:

Employee.call(x); 

3)表達式返回

function new_obj(of){ 
    var obj=Object.create(of.prototype); 
    of.call(obj); 
    return obj; 
} 

var x=new_obj(Employee); 
//equals 
var x=new Employee(); 
+0

你可以在構造函數中按順序寫這個嗎?所以我會修改訂單 – youhana

+0

@youhana主要不是指向x(因爲x尚未定義),它指向內存中的某個對象。新的構造函數返回一個指向這個位置的指針... –

+0

@Johas w:請你能提供一個參考,因爲我不明白of.call(obj) – youhana

相關問題