2013-11-20 3 views
4

Как я знаю, в JavaScript нет хорошего решения для частного лица. Решение, описанное here, неэффективно, поскольку частные члены становятся частями объектов, а не прототипов и, следовательно, требуют больше памяти.
Итак, я решил использовать практику Python - отмечать личные вещи с помощью подчеркивания, позволяя другим знать, что свойство или метод makred не предназначены для использования извне.
Но есть хорошо известный инструмент качества кода - JSLint, и он предлагает не использовать ведущие или завершающие символы подчеркивания.
В чем причина этого? Является ли это просто предложение стиля кода или подчеркивание может привести к более серьезным проблемам? Если это справедливое соглашение о стиле кода в сообществе JS, насколько оно сильное?Лидерский знак подчеркивания для частных лиц

+0

Не можете ли вы это проверить? То же самое с ++ и - проверка? Официальное ECMA 3 зарезервировано для подчеркивания и доллара, я думаю, но это уже не так. – HMR

ответ

4

JSLint - хороший инструмент, но он выражает мнение о методах кодирования, которые находятся в стиле его авторов. Read about what those preferences are here. Нет никакого вреда в парсере JavaScript при использовании верхнего подчеркивания/подстроки, инструмент запрограммирован на то, чтобы видеть это как плохое соглашение и предупреждать вас от его использования. Если использовать ваши подчеркивания - это ваши предпочтения, и это имеет смысл, используйте их.

Если вы не хотите видеть предупреждения в JSLint при использовании идентификаторов, начинающихся с подчеркивания/подстроки, в JSLint есть параметр, чтобы скрыть их от вас. Заверните код, который вы не хотите, чтобы оценить, как этот пример, и вы не увидите предупреждение:

/*jslint nomen: true */ 
var _gaq = {}; 
/*jslint nomen: false */ 

Это верно, если у Вас есть код оцененного из файла, но если вы на веб-сайте JSLint есть опция «Tolerate ... dangling _ in identifiers», которая также удаляет предупреждение.

Обратите внимание: выполнение этого может быть связано с тем, что JSHint анализирует файл. Взгляните на эту ссылку, показывающую JSLint vs JSHint относительно этого флага. Но если вы собираетесь следовать стандарту JSLint, JSHint может привести к путанице.

Частные переменные не существуют в JavaScript без использования закрытий, но это не шаблон, необходимый для выполнения каждого проекта. Если вы хотите узнать больше о закрытии в JavaScript, проверьте Ben Nadel's wonderful blog post и NetTuts+

1

Это просто предложение стиля кода. Вместо этого вы можете использовать JSHint и настроить его, следуя стилю кода в своем проекте/компании. Что касается меня, нет ничего плохого, если вы помечаете частных членов таким образом. Главное правило - следовать единой конвенции во всем проекте. Если это сделает ваш код более читабельным и поддерживаемым, вы можете следовать собственной конвенции для текущего проекта.

0

Префикс подчеркивания можно использовать в качестве условного обозначения. Но это просто конвенция.

Если частный член является свойством экземпляра объекта, единственным способом является объявление переменной в конструкторе. Свойства объекта никогда не регистрируются в прототипе. Если вы храните свойство в прото, его значение было общим для всех других экземпляров. Он работает как статика в POO.

Прототип используется только для решения неопределенного свойства в экземпляре.

Exemple:

function O(){} 
O.prototype.name = "John"; 
var o = new O; 

// o look like that : 
// { 
// __proto__: { name: "John"} 
// } 
console.log(o.name); // write "John" 

o.name = "Tom"; 
// now : 
// { 
// name: "Tom", 
// __poto__: { name: "John" } 
// } 
console.log(o.name); // write "Tom" 

Определение имени на экземпляре не переопределить значение прототипа. Он хранится только в экземпляре до значения proto в каскадном разрешении.


Извините за мой плохой английский.

Смежные вопросы