Итак, первый вопрос здесь - пожалуйста, будьте нежны.
Я работаю над довольно тяжелым JavaScript-проектом с несколькими другими разработчиками из разных областей, не связанных с веб-программированием, и мы решили попробовать использовать публичные и частные методы и свойства в наших псевдо-классах JavaScript исключительно в качестве хорошего практика кодирования (т. е. мы знаем, что в этом нет реального преимущества или безопасности)
Мы поиграли с несколькими различными способами сделать общедоступными и приватными (то есть, используя локальные переменные и функции с привилегированными методами для общественного потребления), и в настоящее время мы решили, что наши конструкторы классов JavaScript действительно возвращают объект, который представляет только их общедоступный интерфейс, эффективно скрывая все остальное.
Вот пример:
function MyObject()
{
var _this = this;
this._privateProperty = 'somevalue';
this._privateMethod = function()
{
// Do Something
}
this.public =
{
publicProperty : _this._privateProperty,
publicMethod : function(){ return _this.privateMethod() }
}
return this.public;
}
Который при создании и входе в Chrome:
var obj = new MyObject();
console.log(obj);
Выходы:
> Object
> publicMethod: function (){ return _this.privateMethod() }
> publicProperty: "somevalue"
>__proto__: Object
Теперь на мой вопрос:
Потому что возвращали открытый интерфейс из конструктора как новый объект, когда вы будете console.log, вы заметите, что он идентифицирует себя как > Object
, тогда как если мы не возвращаем этот открытый интерфейс, он идентифицируется как > MyObject
.
В идеале, мы хотели бы, чтобы последний отображался для целей отладки, и я знаю, как получить доступ к имени MyObject contstructor с помощью _this.constructor.name
, но не знаю, как его настроить, чтобы он распознавался таким образом.
Кто-нибудь знает, как установить это вручную?
Примечание
Я знаю, что это в некотором роде подмена соглашения JavaScript и попытка поместить квадратный колышек в круглое отверстие, но мы обнаружили, что это очень очевидный и читаемый способ выполнить то, что мы пытались сделать. Я открыт для предложений о том, как сделать это с помощью другого дизайна, но в конечном итоге я ищу ответ, который соответствует нашему текущему дизайну.