var user = {
Name: "Some user",
Methods: {
ShowGreetings: function() {
// at this point i want to access variable "Name",
//i dont want to use user.Name
// **please suggest me how??**
},
GetUserName: function() { }
}
}
Respuesta
No puede.
No existe una relación ascendente en JavaScript.
Tomemos por ejemplo:
var foo = {
bar: [1,2,3]
}
var baz = {};
baz.bar = foo.bar;
El único objeto de matriz tiene ahora dos "padres".
Lo que podría hacer es algo como:
var User = function User(name) {
this.name = name;
};
User.prototype = {};
User.prototype.ShowGreetings = function() {
alert(this.name);
};
var user = new User('For Example');
user.ShowGreetings();
David de Dorward aquí. La solución más fácil, sin embargo, sería acceder al user.Name
, ya que user
es efectivamente un singleton.
Puede jugar diferente usando un cierre:
function userFn(name){
return {
Methods: {
ShowGreetings: function() {
alert(name);
}
}
}
}
var user = new userFn('some user');
user.Methods.ShowGreetings();
var user = {
Name: "Some user",
Methods: {
ShowGreetings: function() {
alert(this.Parent.Name); // "this" is the Methods object
},
GetUserName: function() { }
},
Init: function() {
this.Methods.Parent = this; // it allows the Methods object to know who its Parent is
delete this.Init; // if you don't need the Init method anymore after the you instanced the object you can remove it
return this; // it gives back the object itself to instance it
}
}.Init();
// Make user global
window.user = {
name: "Some user",
methods: {
showGreetings: function() {
window.alert("Hello " + this.getUserName());
},
getUserName: function() {
return this.getParent().name;
}
}
};
// Add some JavaScript magic
(function() {
var makeClass = function (className) {
createClass.call(this, className);
for (key in this[className]) {
if (typeof this[className][key] === "object") {
makeClass.call(this[className], key);
}
}
}
var createClass = function (className) {
// private
var _parent = this;
var _namespace = className;
// public
this[className] = this[className] || {};
this[className].getType = function() {
var o = this,
ret = "";
while (typeof o.getParent === "function") {
ret = o.getNamespace() + (ret.length === 0 ? "" : ".") + ret;
o = o.getParent();
}
return ret;
};
this[className].getParent = function() {
return _parent;
};
this[className].getNamespace = function() {
return _namespace;
}
};
makeClass.call(window, "user");
})();
user.methods.showGreetings();
Agregue algunas explicaciones para su respuesta ... –
"Un método privilegiado es capaz de acceder a las variables privadas y métodos y es accesible para los métodos públicos y el fuera de "
Por ejemplo:
function user(name) {
var username = name;
this.showGreetings = function()
{
alert(username);
}
}
Si ajusta 'this.showGreetings' en un objeto no funcionará. – zachdyer
¿Qué hay de esta manera?
user.Methods.ShowGreetings.call(user, args);
para que pueda acceder user.Name en ShowGreetings
var user = {
Name: "Some user",
Methods: {
ShowGreetings: function(arg) {
console.log(arg, this.Name);
},
GetUserName: function() { }
},
Init: function() {
this.Methods.ShowGreetings.call(this, 1);
}
};
user.Init(); // => 1 "Some user"
pregunta Viejo pero ¿por qué no puedes hacer algo como esto:
var user = {
Name: "Some user",
Methods: {
ShowGreetings: function() {
// at this point i want to access variable "Name",
//i dont want to use user.Name
// **please suggest me how??**
var thisName = user.Name; //<<<<<<<<<
},
GetUserName: function() { }
}
}
ya que sólo se llame usuario .Methods.ShowGreetings() después de que el usuario ha sido instanciado. Entonces, ¿sabrá sobre la variable 'usuario' cuando quiera usar su nombre?
Como han dicho otros, con un objeto simple no es posible buscar un elemento primario de un elemento secundario anidado.
Sin embargo, es posible si emplea recursivo ES6 Proxies como ayudantes.
He escrito una biblioteca llamada ObservableSlim que, entre otras cosas, le permite atravesar desde un objeto secundario hasta el elemento principal.
Aquí hay un ejemplo simple (jsFiddle demo):
var test = {"hello":{"foo":{"bar":"world"}}};
var proxy = ObservableSlim.create(test, true, function() { return false });
function traverseUp(childObj) {
console.log(JSON.stringify(childObj.__getParent())); // returns test.hello: {"foo":{"bar":"world"}}
console.log(childObj.__getParent(2)); // attempts to traverse up two levels, returns undefined because test.hello does not have a parent object
};
traverseUp(proxy.hello.foo);
- 1. javascript acceso de objeto rendimiento
- 2. acceso nodo ElementTree nodo primario
- 3. Acceso JavaScript Object Valor literal en el mismo objeto
- 4. objeto JavaScript para objeto JavaScript
- 5. Alcance de JavaScript: haciendo referencia al miembro de objeto primario desde el cierre del miembro secundario
- 6. javascript acceso a propiedades
- 7. ¿Cómo acceder al objeto primario desde las funciones lambda?
- 8. ¿Cómo validar un objeto de modelo anidado basado en el estado del objeto primario?
- 9. Objeto NodeList en javascript
- 10. objeto de acceso pasado en NSNotification?
- 11. acceso JSON nombre del objeto en PHP
- 12. Wikipedia API - Acceso al objeto JSON
- 13. Objeto init en javascript usando ||
- 14. objeto Analizar JSON en JavaScript
- 15. objeto Array-como en javascript
- 16. event.target acceso en IE8 unobstrusive Javascript
- 17. variable de acceso PHP en JavaScript
- 18. ¿Se puede definir el controlador de eventos en el acceso literal al objeto javascript?
- 19. Javascript - miembro de objeto de acceso cuando la cadena de identificador está almacenada en var
- 20. JavaScript: Acceso propia propiedad de objeto en el interior literal de matriz
- 21. Javascript de acceso índice personalizado
- 22. Javascript ámbito externo acceso variable
- 23. acceso Javascript otra página web
- 24. JavaScript DOMParser acceso innerHTML y otras propiedades
- 25. Acceso a la IU desde JavaScript en Android
- 26. APP primario compuesto clave
- 27. jQuery encontrar formulario primario
- 28. ptrace'ing del proceso primario
- 29. ScrolledComposite primario con GridLayout
- 30. ventana Javascript objeto
posible duplicado de [matriz de acceso de los padres de Javascript objeto] (http://stackoverflow.com/questions/183702/access-parents-parent-from- javascript-object) –