Получить прямую ссылку на свойство JavaScript
После ответа на этот вопрос об использовании свойства style.top элемента div в jQuery$.animate()
Я начал задаваться вопросом, есть ли способ сделать это в большей степени в соответствии с тем, что, по мнению ОП, он мог сделать.
Вопрос в следующем: можем ли мы получить прямую ссылку на свойство объекта, когда это свойство является примитивным типом?
Например, если у вас был объект с именем myDiv
Вы могли бы получить ссылку на свой style
свойство, потому что это объект, но есть ли способ получить ссылку на top
собственностью style
так что, когда это изменится, вам не придется извлекать его снова и снова? (Примечание: я не говорю, что этот поиск важен в вычислительном отношении. Это просто вопрос о том, что возможно, а не о том, что является хорошей практикой.)
var myDiv = document.getElementById('myDiv');
myDiv.style.top = "100px";
var myDivStyle = myDiv.style;
var myDivStyleTop = myDiv.style.top;
myDiv.style.top = "200px";
console.log(myDivStyle.top); // will print "200px"
console.log(myDivStyleTop); // will obviously print "100px"
Есть ли способ сослаться на это top
собственность напрямую, без прохождения style
? Мой инстинкт - нет, но JS удивил меня раньше, поэтому я просто хотел убедиться.
2 ответа
Нет. Переменная - это простой контейнер, который может содержать значение. Присвоение нового значения переменной никогда не может изменить значение другой переменной или свойства.
В этом отношении не имеет значения, содержит ли переменная примитивные значения или объект, это просто, как переменные работают.
Нет, нет Примитивы неизменны и никогда не хранятся по ссылке.
От MDN
ссылка на объект
Ссылка на объект. Ссылки на объекты могут использоваться, как если бы они были объектами, на которые они ссылаются. Концепция ссылок на объекты возникает при назначении одного и того же объекта более чем одному свойству. Каждое назначенное свойство не содержит копию объекта. Вместо этого они содержат ссылки на объекты, которые ссылаются на один и тот же объект. На практике это означает, что если объект изменяется, все свойства, относящиеся к объекту, отражают изменение.
примитивное, примитивное значение
Данные, которые не являются объектом и не имеют никаких методов. JavaScript имеет 5 примитивных типов данных: строка, число, логическое значение, ноль, неопределенный. За исключением значений null и undefined, все значения примитивов имеют объектные эквиваленты, которые оборачиваются вокруг значений примитивов, например, объект String оборачивает строковый примитив. Все примитивы неизменны.