Saya sudah mencari solusi, tetapi tidak dapat menemukannya.
Saya memiliki variabel yang dipanggil onlyVideo
.
"onlyVideo"
string dilewatkan ke fungsi. Saya ingin mengatur variabel onlyVideo
di dalam fungsi sebagai sesuatu. Bagaimana saya bisa melakukan itu?
(Ada sejumlah variabel yang dapat dipanggil ke dalam fungsi, jadi saya membutuhkannya untuk bekerja secara dinamis, bukan if
pernyataan yang dikodekan dengan keras .)
Sunting: Mungkin ada cara yang lebih baik untuk melakukan apa yang Anda coba lakukan. Saya menanyakan hal ini sejak awal dalam petualangan JavaScript saya. Lihat cara kerja objek JavaScript.
Pengenalan sederhana:
// create JavaScript object
var obj = { "key1": 1 };
// assign - set "key2" to 2
obj.key2 = 2;
// read values
obj.key1 === 1;
obj.key2 === 2;
// read values with a string, same result as above
// but works with special characters and spaces
// and of course variables
obj["key1"] === 1;
obj["key2"] === 2;
// read with a variable
var key1Str = "key1";
obj[key1Str] === 1;
javascript
variables
switz
sumber
sumber
Jawaban:
Jika itu adalah variabel global maka
window[variableName]
atau dalam kasus Andawindow["onlyVideo"]
harus melakukan trik.sumber
scope[property]
atau bahkanthis[property]
this
adalah konteks, apa yang ditunjukkan tergantung pada bagaimana fungsi dipanggil. Di JS, 50% dari waktuthis
adalahwindow
kecuali Anda mengaktifkan mode ketat danthis
menjadiundefined
dan akan melempar kesalahan. Lingkup adalah sesuatu yang sama sekali berbeda dan itu bukan objek (kecuali ruang lingkup global yang dicerminkan olehwindow
objek)WebWorkers
( di manaself
merujuk ke lingkup global, seperti halnya di browser, di mana itu sama denganwindow
) dan Node.js, di managlobal
variabel yang Anda inginkan. Dan itu lebih baru bekerja dengan cakupan lokal, seperti fungsi tubuh.const
menggunakan metode ini?Javascript memiliki
eval()
fungsi untuk acara-acara seperti itu:Sunting: Maaf, saya pikir saya terlalu cepat membaca pertanyaan. Ini hanya akan membuat Anda variabel, untuk mengaturnya Anda perlu
atau jika menggunakan string:
Tapi saya membayangkan ada cara yang lebih tepat untuk mencapai apa yang Anda cari? Saya tidak berpikir eval () adalah sesuatu yang Anda benar-benar ingin gunakan kecuali ada alasan bagus untuk itu. eval ()
sumber
eval()
jawaban diturunkan untuk dihapus, dan jawaban ini dibatalkan?window[varname]
memiliki efek samping dari memperkenalkan variabel global, yang mungkin tidak diinginkan. @ Shaz, saya rasa Anda tidak memberikan cukup banyak penerjemah JS modern. Mereka sangat cepat, dan parsing dan menjalankan operasi penugasan satu baris sederhana tidak akan melonjak penggunaan CPU siapa pun asalkan tidak dilakukan dalam timer 1ms atau loop ketat.Sejauh eval vs solusi variabel global ...
Saya pikir ada keuntungan untuk masing-masing tetapi ini benar-benar dikotomi yang salah. Jika Anda paranoid dari namespace global, buat namespace sementara & gunakan teknik yang sama.
Cukup yakin Anda kemudian dapat mengakses sebagai tempNamespace.myVarProperty (sekarang 5), menghindari menggunakan jendela untuk penyimpanan. (Tali juga bisa dimasukkan langsung ke dalam kurung)
sumber
Katakan tidak pada eval jahat . Contoh di sini: https://jsfiddle.net/Shaz/WmA8t/
sumber
function aScope() { this[myString] = function() { alert("Hello!"); };};
this
bukan referensi ke lingkup lokal tetapi ke objek yang terikat fungsi selama panggilan.Anda dapat mengakses objek jendela sebagai array asosiatif dan mengaturnya seperti itu
sumber
Metode window ['variabelName'] HANYA berfungsi jika variabel didefinisikan dalam lingkup global. Jawaban yang benar adalah "Refactor". Jika Anda dapat memberikan konteks "Objek" maka solusi umum yang mungkin ada, tetapi ada beberapa variabel yang tidak dapat diselesaikan fungsi global berdasarkan pada cakupan variabel.
sumber
Jika Anda mencoba mengakses properti objek, Anda harus mulai dengan cakupan
window
dan menelusuri setiap properti objek hingga Anda mendapatkan yang Anda inginkan. Dengan asumsi yanga.b.c
telah didefinisikan di tempat lain dalam skrip, Anda dapat menggunakan yang berikut:Ini akan bekerja untuk mendapatkan properti dari objek apa pun, tidak peduli seberapa dalam itu.
sumber
name
sebagai nama variabel, contoh Anda gagal, tetapi berfungsi dengan nama variabel lainnya. Ini mungkin ada hubungannya dengan objek Window yang sudah memilikiname
variabel. Juga, termasuk.value
metode yang menyebabkan kegagalan. Kemampuan untuk menafsirkan variabel objek bersarang mendalam adalah apa yang saya cari dan metode Anda menunjukkan arah yang baik. Terima kasih.Uncaught TypeError: Cannot read property 'split' of undefined
Anda bisa melakukan ini
sumber
Itu bisa dilakukan seperti ini
sumber
Kode berikut memudahkan untuk merujuk ke masing-masing DIV dan elemen HTML lainnya dalam JavaScript. Kode ini harus dimasukkan tepat sebelum tag, sehingga semua elemen HTML telah terlihat. Itu harus diikuti oleh kode JavaScript Anda.
sumber
biarkan saya membuatnya lebih jelas
sumber