2014-09-17 4 views
0

Это будет сложный вопрос. Имея конструктор:Что нового?

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

мы можем создать объект:

var obj = new Constructor(); 

это в конструкторе относится к окну, но при вызове нового 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

«new SomeFunction()» создает новый объект и вызывает SomeFunction с этим объектом как «это».

Рассмотрим это:

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

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