1

Тема: JS:Как передать в ф-ю имя и значение св-ва объекта

Вопрос такой: можно ли передать как параметр функции, при помощи которой создаётся объект, не только значение, но и имя свойства. пробовал так:

function test(a1, a)
    {
    
    var myObj = new Object();                
    myObj.a1 = a;                        
    
    var lst = "";
    for(i in myObj)
        {
        lst += "Имя свойства: " + i + ";  Значение свойства = " + myObj[i] + "\n";
        }
    return lst;            
    }

WScript.Echo(test("str", "строковое значение"));           // не выводит "правильного" имя свойства

пробовал и так:

function test(a1, a)
    {    
    this.a1 = a;                
    }

var myObj = new test("str", "строковое значение");
var lst = "";
    for(i in myObj)
        {
        lst += "Имя свойства: " + i + ";  Значение свойства = " + myObj[i] + "\n";
        }
WScript.Echo(lst);               // та же фигня...

2

Re: JS:Как передать в ф-ю имя и значение св-ва объекта

Можно. Только присваивать нужно так:
    myObj[a1] = a;                       


function test(a1, a)
    {
    
    var myObj = new Object();                
    myObj[a1] = a;                        
    
    var lst = "";
    for(i in myObj)
        {
        lst += "Имя свойства: " + i + ";  Значение свойства = " + myObj[i] + "\n";
        }
    return lst;            
    }

WScript.Echo(test("str", "строковое значение"));           // выводит "правильное" имя свойства

3

Re: JS:Как передать в ф-ю имя и значение св-ва объекта

спасибо, работает

4

Re: JS:Как передать в ф-ю имя и значение св-ва объекта

Чтоб уж все случаи охватить...  как присваивать в такой ситуации:

function test(a1, a)
    {
    var myObj = {a1:a};                
   
    var lst = "";
    for(i in myObj)
        {
        lst += "Имя свойства: " + i + ";  Значение свойства = " + myObj[i] + "\n";
        }
    return lst;            
    }

WScript.Echo(test("str", "строковое значение"));           // ???

5

Re: JS:Как передать в ф-ю имя и значение св-ва объекта

Если я правильно понял, вопрос именно про фигурные скобки?
Я такого способа не знаю.

6 (изменено: Rumata, 2013-05-30 01:20:30)

Re: JS:Как передать в ф-ю имя и значение св-ва объекта

im2002
Для адресации к элементам объектов используется две нотации:
-- точечная


var obj = {};
obj.a = 1;

-- скобочная


var obj = {};
obj['a'] = 1;

Обе записи равноправны, но точечная чуть проще, хотя позволяет адресовать только к цифробуквенным свойствам объектов. В то время как скобочная нотация разрешает любые символы в именах:


var obj = {
    a: 1, // obj.a или obj['a']
    'b': 2, // аналогично предыдущей строке
    'dash-style': 3, // не цифробуквенные символы в имени
    'class': 4 // зарезервированное слово запрещено использовать, но в кавычках - можно
};

То есть Ваш пример


var a1 = 'test';
var myObj = {a1:a};

подразумевает объект myObj с ключом a1, то есть адресация будет именно myObj.a1 или myObj['a1']. Значение переменной a1 ключом объекта не станет. Для этого необходимо использовать скобочную нотацию.

( 2 * b ) || ! ( 2 * b )

7

Re: JS:Как передать в ф-ю имя и значение св-ва объекта

Обе записи равноправны,

В скорости доступа нет разницы?

8

Re: JS:Как передать в ф-ю имя и значение св-ва объекта

Вопрос был в том каким образом передать в функцию, которая "создаёт" объект и имя и значение свойств создаваемого объекта. Как "правильно писать" код в случаях 1 и 2 любезно пояснил Spy00000. Просто хотелось понять можно ли как-то "извернуться", если объект, который создаётся "внутри" функции объявляется следующим образом:

var myObj = {a1:a}; 

.  Т.е. как написать эту самую строку, чтобы при вызове ф-ции с параметрами a1 и a параметр а1 был именем свойства объекта, а параметр а был значением этого свойства. Вот и всё, сам я как ни крутил, скобки, кавычки, точки - подходящей записи так и не нашёл... Может её просто не существует?!

9

Re: JS:Как передать в ф-ю имя и значение св-ва объекта

function CreateObj (prop, value){
    var obj = {};
    obj[prop] = value;
    return obj;
}

var myObj = CreateObj ("prop_name", "значение свойства prop_name");
WScript.Echo(myObj.prop_name);

var myObj2 = CreateObj ("a1", "a");
WScript.Echo(myObj2.a1);

Это - лишь пересказ сказанного выше. Или я не понял вопроса.

10

Re: JS:Как передать в ф-ю имя и значение св-ва объекта

alexii

В скорости доступа нет разницы?

Нет.

11

Re: JS:Как передать в ф-ю имя и значение св-ва объекта

mozers пишет:
function CreateObj (prop, value){
    var obj = {};
    obj[prop] = value;
    return obj;
}

Это - лишь пересказ сказанного выше. Или я не понял вопроса.

Немного по другому хотел:

function CreateObj (prop, value){
    var obj = {prop:value};              // вот про такой способ "объявления" объекта внутри функции хотел узнать...
    return obj;
}

В принципе, бог с ним, неважно.

12

Re: JS:Как передать в ф-ю имя и значение св-ва объекта

2im2002

вот про такой способ "объявления" объекта внутри функции хотел узнать...

Это - "ручной" способ. Т.е. при таком объявлении имя свойства программно задать нельзя.

13 (изменено: omegastripes, 2013-08-05 21:25:47)

Re: JS:Как передать в ф-ю имя и значение св-ва объекта

im2002 пишет:

В принципе, бог с ним, неважно.

mozers пишет:

нельзя.

function test(a1, a)
    {
    eval("var myObj = {" + a1 + ":a};");
   
    var lst = "";
    for(i in myObj)
        {
        lst += "Имя свойства: " + i + ";  Значение свойства = " + myObj[i] + "\n";
        }
    return lst;            
    }

WScript.Echo(test("str", "строковое значение"));

Щт Уккщк Куыгьу Туче
’ҐЄгй п Є®¤®ў п бва Ёж : 1251

14

Re: JS:Как передать в ф-ю имя и значение св-ва объекта

нет ничего невозможного

15

Re: JS:Как передать в ф-ю имя и значение св-ва объекта

im2002 пишет:

нет ничего невозможного

Извращение с повторным вызовом интерпретатора (а если  в цикле?) там, где можно грамотно воспользоваться квадратными скобками -- для дикарей.

Забыл пароль и потерял e-mail.