Javascript nesne değerleri dinamik olarak nasıl ayarlanır?


98

Vakayı kelimelerle açıklamak zor, bir örnek vereyim:

var myObj = {
    'name': 'Umut',
    'age' : 34
};

var prop = 'name';
var value = 'Onur';

myObj[name] = value; // This does not work

eval('myObj.' + name) = value;   //Bad coding ;)

Bir JavaScript nesnesinde değişken değerli bir değişken özelliğini nasıl ayarlayabilirim?



2
Yakından bakın. Görünüşe göre kurs kodunu değiştirmeyi unutmuşsun. Olmalı myObj[prop] = value;. eval('myObj.'+name)değişken nameolmadığından da çalışmaz.
Felix Kling

7
varDeğişkenleri bildirmek için gerçekten daha fazla klavye kullanmalı, daha fazla noktalı virgül kullanmalı, daha evalfazla yanıt kullanmamalı ve kabul etmelisiniz . Bitti.
jAndy

O - Sorunuz kusurludur yapar işi, ancak bir hata yaptı. " myObj[name]" Yazmak istediğinden emin olduğumda " " yazdın myObj[prop].
Ernest Friedman-Hill

Yanıtlar:


151
myObj[prop] = value;

Bu çalışmalı. Değişkenin adını ve değerini karıştırdınız. Ancak, özelliklerine ulaşmak için dizeleri olan bir nesnenin dizine alınması JavaScript'te iyi çalışır.


47
myObj.name=value

veya

myObj['name']=value     (Quotes are required)

Bunların ikisi de birbirinin yerine kullanılabilir.

Düzenleme:myObj[prop] = value myObj [ad] = değer yerine demek istediğini tahmin ediyorum . İkinci sözdizimi iyi çalışıyor: http://jsfiddle.net/waitinforatrain/dNjvb/1/


1
Object özelliği ayrılmış bir sözcükse, ikinci sözdizimi gereklidir.
timw4mail

Bu doğru olsa da, sorusuna gerçekten cevap vermiyor; mülkiyet adı bir değişkendeyken ne yapacağını merak ediyor.
Ernest Friedman-Hill

nameBurada yanıt güncellendi, sahip olmanız gereken yer elinizdeprop
bcoughlan

5

Mülkü, ayarladığınız şekilde alabilirsiniz.

foo = {
 bar: "value"
}

Değeri siz belirlersiniz foo["bar"] = "baz";

Değeri almak için foo["bar"]

"baz" döndürecektir.


5

Bir değer nesnesine (vo) benzer bir şey de yaratabilirsiniz;

SomeModelClassNameVO.js;

function SomeModelClassNameVO(name,id) {
    this.name = name;
    this.id = id;
}

Yapabileceğinden daha fazlasını;

   var someModelClassNameVO = new someModelClassNameVO('name',1);
   console.log(someModelClassNameVO.name);

3

Sahip olduğunuz myObjgibi bir nesne yarattığınızda , onu daha çok bir sözlük gibi düşünün. Bu durumda, iki anahtarı vardır nameve age.

Bu sözlüklere iki şekilde erişebilirsiniz:

  • Bir dizi gibi (örneğin myObj[name]); veya
  • Bir mülk gibi (örneğin myObj.name); bazı özelliklerin rezerve edildiğini, bu nedenle ilk yöntemin tercih edildiğini unutmayın.

Herhangi bir sorun yaşamadan mülk olarak erişebilmelisiniz. Ancak, ona bir dizi olarak erişmek için, anahtarı bir dizge gibi ele almanız gerekir.

myObj["name"]

Aksi takdirde, javascript bunun namebir değişken olduğunu varsayar ve adında bir değişken oluşturmadığınız nameiçin beklediğiniz anahtara erişemez.


1
Yine de aralarında myObj[name]ve arasında bir fark var myObj.name, çünkü ilki bir değişken ismine ve ikincisi bir değişmez anahtara atıfta bulunuyor.
pimvdb

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.