function Foo() {
this.bar = 0;
this.getBar = function () { return this.bar };
}
Когда вы вызываете функцию выше с ключевым словом new
- вот так ...
var foo = new Foo();
... - происходит несколько вещей:
1) создается объект. 2) функция выполняется с ключевым словом this
, ссылающимся на этот объект. 3) этот объект возвращается.
foo
, затем становится этим объектом:
{
bar: 0,
getBar: function () { return this.bar; }
};
Почему бы не тогда просто сделать это:
var foo = {
bar: 0,
getBar: function () { return this.bar; }
};
Вы бы, если это просто один простой объект.
Но создание объекта с конструктором (так оно называется) дает нам большое преимущество в создании нескольких «одинаковых» объектов.
См. в javascript все функции создаются с использованием свойства prototype [object], и все объекты, созданные с помощью этой функции (путем вызова его с новым ключевым словом), связаны с этим прототипом. Вот почему это так здорово - вы можете хранить все распространенные методы (и свойства, если хотите) в объекте прототипа, и сэкономить много памяти. Вот как это работает:
function Foo( bar, bob ) {
this.bar = bar;
this.bob = bob;
}
Foo.prototype.calculate = function () {
// 'this' points not to the 'prototype' object
// as you could've expect, but to the objects
// created by calling Foo with the new keyword.
// This is what makes it work.
return this.bar - this.bob;
};
var foo1 = new Foo(9, 5);
var foo2 = new Foo(13, 3);
var result1 = foo1.calculate();
var result2 = foo2.calculate();
console.log(result1); //logs 4
console.log(result2); //logs 10
Вот и все!