Редактировать: Глядя на изменения в вопросе, я спрашиваю вас:
- Планируете ли вы иметь несколько «экземпляров» вашей библиотеки одновременно?
Если вы этого не сделаете, я не вижу никакой пользы от использования конструктора, у вас будет только один объект, нет смысла определять свойства его прототипа - они все равно будут определены и использованы для одного объекта -.
Использование наследования будет полезно в том случае, если вы хотите иметь несколько экземпляров объекта, методы будут совместно использованы, повторно использованы и объявлены только один раз - выше в цепочке прототипов.
В вашем втором примере есть несколько проблем:
var myLib = (function() {
this.publicProperty = 'this';
}());
Переменная myLib
будет содержать только undefined
- вы ничего не возвращаете из выражения функции-, а ваш publicProperty
будет определен как свойство глобального объекта, так как при выполнении этого функция, this
будет привязана к глобальному объекту.
Кроме того, если код выполняется в строгом режиме , значение this
в этом случае будет undefined
, а выражение доступа к вашему свойству просто выдаст TypeError
- хорошая вещь IMO, так как я почти уверен, что вы не хотите объявлять publicProperty
как член глобального объекта -.
myLib.prototype = {
publicMethod: function() {
console.log('public method');
},
anotherMethod: function() { //... },
// ... many more public methods
};
Доступ к свойству prototype
здесь не удастся - помните, myLib
- это undefined
-.
Значение prototype
имеет смысл только для функций , используемых для функций конструктора -функций, предназначенных для использования с оператором new
- я думаю, вы путаете это свойство с внутренним свойством [[Prototype]]
, которое есть у всех объектов.
Определение свойства с именем prototype
для нефункционального объекта не будет иметь никакого эффекта.
Смотри также: