javascript - utilizar - El uso de la variable "nombre" no funciona con un objeto JS
pasar variable laravel a javascript (3)
window.name se utiliza para establecer el nombre de la ventana, y dado que el nombre de la ventana solo puede ser una cadena, todo lo que establezca en window.name se convierte en una cadena. Y las cadenas, como valores primitivos, no pueden tener propiedades. La solución es usar un nombre de variable diferente o un alcance diferente.
Alternativamente, puede usar window.name como desee si tiene este código primero. No lo recomiendo en absoluto, sino como una prueba de concepto:
(function () {
var _name;
window.__defineGetter__(''name'', function () {
return _name;
});
window.__defineSetter__(''name'', function (v) {
_name = v;
});
})();
Además, debe usar {} en lugar de new Object . Además de ser más conciso, también es más eficiente y más explícito.
El comportamiento se puede ver en este pequeño fragmento (ejecutarlo como un script global):
var name = {};
name.FirstName = ''Tom'';
alert(name.FirstName);
La alerta undefined en Chrome pero funciona en IE y Firefox. También tengo un valor extraño cuando lo hago
alert(name);
window.name tiene un propósito especial, y se supone que es una cadena. Chrome parece convertirlo explícitamente en una cadena, por lo que var name = {}; en realidad termina dando el name variable global (es decir, window.name ) un valor de "[object Object]" . Como es una primitiva, las propiedades ( name.FirstName ) no se " name.FirstName ".
Para evitar este problema, no use el name como una variable global.
Su variable de name es en realidad window.name , porque las variables de nivel superior declaradas con var se adjuntan al objeto global.
La especificación HTML5 requiere que window.name sea un DOMString . Esto significa que el valor de window.name solo puede ser una secuencia de caracteres , no un objeto.
En Chrome, un intento de usar window.name para almacenar algo excepto una cadena primitiva forzará el valor a una cadena primitiva. Por ejemplo:
window.name = {};
window.name === "[object Object]"; // true
Puede evitar este problema utilizando una variable de name que no se encuentre en el ámbito de nivel superior:
(function() {
var name = {};
// this `name` is not `window.name`
// because we''re not in the top-level scope
console.log(name);
})();