Для получения и верхнего регистра и нижнего регистра объединяют два диапазона:
$alphas = array_merge(range('A', 'Z'), range('a', 'z'));
У вас не может быть "частных" переменных без задействованной функции. Функции - это единственный способ ввести новую область видимости в javascript.
Но не бойтесь, вы можете добавлять функции в нужное место, чтобы получить такую функциональность с вашим объектом
var dataset = {
tables: {
customers:(function(){
var privateVar = 'foo';
return {
cols:[ /*here*/ ],
rows:[ /*here*/ ]
}
}()),
orders:{
cols:[ /*here*/ ],
rows:[ /*here*/ ]
}
},
relations: [{
parent:'customers',
child:'orders',
keyparent:'custid',
keychild:'orderid',
onetomany:true
}]
};
Но это не « Мы многого добьемся. Это все еще в основном набор буквальных объектов. Эти типы «частных» переменных не имеют смысла, поскольку отсутствуют методы - ничего, что могло бы фактически читать или иным образом использовать переменные в области видимости, которую мы создали путем добавления функции (замыкание).
Но если бы у нас был метод, это может действительно стать полезным.
var dataset = {
tables: {
customers:(function(){
var privateVar = 'foo';
return {
cols:[ /*here*/ ],
rows:[ /*here*/ ],
getPrivateVar: function()
{
return privateVar;
}
};
}()),
orders:{
cols:[ /*here*/ ],
rows:[ /*here*/ ]
}
},
relations: [{
parent:'customers',
child:'orders',
keyparent:'custid',
keychild:'orderid',
onetomany:true
}]
};
alert( dataset.tables.customers.getPrivateVar() );
Частные переменные в javascript выполняются с использованием ключевого слова var внутри замыкания. Доступ к нему имеют только привилегированные методы и атрибуты. Вот способ сделать это:
function dataset()
{
var private_stuff = 10; // private
this.foo = new function() { alert(private_stuff); } // priviliged
return {
tables:{
customers:{
cols:[ ],
rows:[ ]
},
orders:{
cols:[ ],
rows:[ ]
}
},
relations:{
0:{
parent:'customers',
child:'orders',
keyparent:'custid',
keychild:'orderid',
onetomany:true
}
}
}; // public
}
var d = new dataset;
alert(d.foo());
В JavaScript отсутствуют средства управления доступом, которые есть в более жестких языках. Вы можете имитировать частный доступ к данным объектов, используя закрытие , но ваш пример - это литерал объекта - простая структура данных - а не сконструированный объект.
Это скорее зависит от того, что вы хотите делать с объектом - обычный метод для «частных» членов означает, что они доступны только для функций-членов, и требует, чтобы вы использовали конструктор для создания объекта. Синтаксис литерала используется для структур данных или легких объектов с общедоступными данными и функциями.
Проблема с использованием шаблона закрытого закрытого типа состоит в том, что поля внутри литерала находятся в общедоступной области видимости, но конфиденциальность, обеспечиваемая закрытием, обусловлена тем, что переменная определена в функции, поэтому имеет локальную область видимости. Вы можете либо создать функцию, которая клонирует литерал и добавляет частные поля, либо добавить общедоступное поле с частными данными. Вы также можете добавлять замыкания в качестве членов, поэтому создавайте закрытые поля, которые являются закрытым методом, а не объектом.
dataset = {
secretCounter: (
function () {
var c = 0;
return function () { return ++c; }
})(),
...
Итак, dataset.secretCounter ()
имеет переменную c
, которая является закрытой для только эта функция.
Проблема с использованием шаблона частного закрытия заключается в том, что поля внутри литерала находятся в общедоступной области видимости, но конфиденциальность, обеспечиваемая закрытием, заключается в том, что переменная определена в функции, поэтому область видимости ограничена локально. Вы можете либо создать функцию, которая клонирует литерал и добавляет частные поля, либо добавить общедоступное поле с частными данными. Вы также можете добавлять замыкания в качестве членов, поэтому создавайте закрытые поля, которые являются закрытым методом, а не объектом.
dataset = {
secretCounter: (
function () {
var c = 0;
return function () { return ++c; }
})(),
...
Итак, dataset.secretCounter ()
имеет переменную c
, которая является закрытой для только эта функция.
Проблема с использованием шаблона частного закрытия заключается в том, что поля внутри литерала находятся в общедоступной области видимости, но конфиденциальность, обеспечиваемая закрытием, заключается в том, что переменная определена в функции, поэтому область видимости ограничена локально. Вы можете либо создать функцию, которая клонирует литерал и добавляет частные поля, либо добавить общедоступное поле с частными данными. Вы также можете добавлять замыкания в качестве членов, поэтому создавайте закрытые поля, которые являются закрытым методом, а не объектом.
dataset = {
secretCounter: (
function () {
var c = 0;
return function () { return ++c; }
})(),
...
Итак, dataset.secretCounter ()
имеет переменную c
, которая является закрытой для только эта функция.