Разница между ними относится к наследованию и использования. Ваш object2
всегда создает объекты, напрямую подкрепленные Object.prototype
и не требует использования ключевого слова new
; ваш object1
создает объект, поддерживаемый object1.prototype
(который в свою очередь подкрепляется Object.prototype
) и делает требует использования new
.
Ничто не является «лучшим» в любом объективном способе, это всего лишь два разных способа использования JavaScript, которые будут иметь принципиально такую же производительность. Первый - много более распространенный, второй - небольшим, но вокальным меньшинством в сообществе JavaScript.
object1
пример более типично записываются следующим образом:
function Object1() {
var private_i = null;
this.public_j = null;
//public function
this.public_func = function() {
};
}
Обратите внимание, что первая буква в таких функциях прописные букв (подавляющая конвенцию).
Прототип вещь приходит в него, если вы собираетесь иметь функции, которые не нуждаются в доступе к private_i
: Вы можете поместить те на объект, который будет назначен новым объектам, созданным с помощью new Object1
так:
function Object1() {
var private_i = null;
this.public_j = null;
//public function
this.public_func = function() {
};
}
Object1.prototype.someOtherFunction = function() {
// Doesn't use `private_i`
};
Вы также можете использовать прототипы с вашими object2
, например, так:
//Object created with public members defined using return patterns.
var object2Prototype = {
someOtherFunction: function() {
// Doesn't need private_i
};
};
var object2 = function() {
var private_i = null,
public_j = null,
//private function will be exposed from return statement.
_public_func = function() {
};
var obj = Object.create(object2Prototype);
obj.public_func = _public_func;
return obj;
};
Крокфорд рекомендует отмену 'this'. https://www.youtube.com/watch?v=PSGEjv3Tqo0 – m59
Первый 1 это проще и меньше обработки. вы можете попробовать проверить производительность на jsperf. :) – frogcoder
Эти 2 фрагмента не дают одинаковых результатов, следовательно, они несравнимы. – zerkms