2014-09-17 4 views
0

이것은 까다로운 질문이 될 것입니다. 우리가 객체 생성 할 수 있습니다정확히 새로운 것은 무엇입니까?

var Constructor = new function(){ 
this.a = 'a'; 
this.b = 'b'; 
} 

: 생성자 갖는

var obj = new Constructor(); 

생성자에서이 창을 의미를하지만 일부 마법 수행되고) (새 생성자를 호출 할 때 : 지금 을 함수의 범위를 찾는 것입니다 (정확하게 작동하는 방법은 무엇입니까?) obj에 해당 범위 만 할당하면 반환됩니다. 그래서 기본적으로 같은 일을하고있다 :

var Constructor = new function(){ 
var this = {some object having variables needed for every object (like __proto__)}  
this.a = 'a'; 
this.b = 'b'; 
return this; 
} 

사람이 낮은 수준에서 일하고 JS의 새로운 객체의 생성이 메커니즘이 얼마나 말해 줄래? 으로 전화 할 때 정확하게 무엇을하고 있습니까?

+0

을하고'새로운 기능()'의 포인트는 무엇인가? –

+0

@ MatíasFidemraizer : [실수예요] (https://stackoverflow.com/questions/10406552/is-it-right-to-think-of-a-javascript-function-expression-that-uses-the-new- key) – Bergi

+0

* "이제'this'는"* 당신은 혼란스러운 범위와 'this'에있는 함수의 범위를 찾습니다. 그들은 실제로 서로 할 일이 없습니다 (각 환경 (스코프)의 환경을 제외하고는 바인딩이 있습니다). –

답변

1

"새로운 SomeFunction()"은 새 객체를 만들고 해당 객체를 "this"로 호출하여 SomeFunction을 호출합니다.

이 고려 :

function SomeFunction() { 
    this.hello = "Hello, world"; 
} 
var myObj = new SomeFunction(); 
myObj.hello; // "Hello, world" 

var myObj2 = {}; 
SomeFunction.call(myObj2); 
myObj2.hello; // "Hello, world" 
관련 문제