Я пытаюсь создать несколько версий объекта, который имеет функцию init. Я попытался использовать функцию javascript «new», но в этом случае это не работает, и консоль уведомляет меня об этом, потому что это не функция. См. Код для более четкого описания того, что я пытаюсь сделать. Я понимаю, почему этот код будет предупреждать пункт два, а не пункт один, но я не знаю, как получить правильное поведение.создание нескольких экземпляров свойства объекта
var myApp = {
menu: {
init: function (name) {
this.name = name;
},
alertName: function() {
alert(this.name);
}
}
}
$(document).ready(function() {
var first = myApp.menu;
var second = myApp.menu;
first.init('item one');
second.init('item two');
first.alertName();
});
В чем основная причина использования jquery здесь, а не опция Object.create в ответе Tibos –
@Peter Saxton. По двум причинам: во-первых, он уже использовал jQuery, поэтому для него не проблема использовать функцию jQuery. Во-вторых, функция «Object.create» недоступна до IE 9 ([Страница MDN Object.create] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create # Cross-browser_compatibility)). Когда есть выбор, я выбираю решение, обеспечивающее максимальную совместимость. – Elorfin
Следует упомянуть некоторые соображения: 1) это решение имеет удар производительности при работе со многими объектами, поскольку оно клонирует объекты, а не использует прототипное наследование JS. 2) на странице MDN под таблицей совместимости имеется полиполк для этого точного варианта использования, который может использоваться, если OP хочет поддерживать старые браузеры. – Tibos