Преимущество делать это таким образом, что вы можете изменить свою функцию без changeing это подпись. Еще одно преимущество заключается в том, что если вы много входных параметров, с которыми не все обязательно, вы не должны добавить значения параметров по умолчанию вы не используете ... – @Michiel Reyers
Вот пример того, как можно создать новый «экземпляр» с объекта буквального в качестве параметра в функции конструктора, избавившись от списка параметров:
function Schema (options) {
"use strict";
options = options || {};
this.user = options.user || "unnamed";
this.time = options.time || null;
this.content = options.content || {};
}
В предыдущем подходе мы можем создавать новые объекты, указывая ни одно, ни одно, ни все свойства в параметре ввода.Кроме того, подпись конструктора остается неизменным:
var comment;
//no arguments
comment = new Schema();
//only one option
comment = new Schema({ user: "luis" });
//multiple options
comment = new Schema({
user: "Federico",
time: new Date(1995, 10 - 1, 31), //october 31, 1995
content: { type: Types.String, required: true, trim: true }
});
Также вы можете расширить объект, поэтому функция конструктор может быть более гибкими за счет расширения в случае новых свойств в параметре ввода. В этом примере я собираюсь использовать jQuery (я знаю, что нет в теге), но вы можете создать собственный метод для расширения объектов без jQuery.
//pointer to the internal Schema
var Schema = (function() {
//cached default values
var defaults = {
user: "unnamed",
time: null,
content: {}
};
//constructor extensible
function Schema (options) {
"use strict";
//merges @options and @defaults into the instance @this
jQuery.extend(this, defaults, options);
}
//returns the reference to Schema;
return Schema;
}());
Здесь мы использовали шаблон Конструктора. Вы можете использовать Schema
и добавлять новые свойства без необходимости изменять подпись конструктора. (Также см. MODULE рисунок).
var comment = new Schema({ user: "Felipe", age: 31 });
Усовершенствование предыдущего подхода, чтобы установить значения по умолчанию в конструкторе прототипе:
//pointer to the internal Schema
var Schema = (function ($) {
//constructor extensible
function Schema (options) {
"use strict";
//merges @options into the instance @this
$.extend(this, options);
}
//sets the default values
Schema.prototype = {
"user": "unnamed",
"time": null,
"content": {}
};
//returns the reference to Schema;
return Schema;
}(jQuery));
var comment = new Schema();
console.log(comment);
comment = new Schema({ user: "coco", age: +"d" });
console.log(comment);
Привет Михель спасибо за ваш ответ, но я все еще немного запутался, вы можете пожалуйста, объясните, как тип ввода функции конструктора может быть объектом в условиях неспециалиста? –
Теперь имеет смысл! В чем преимущество этого? –
Просто добавлено некоторое объяснение преимуществ. – Michiel