2012-10-04 5 views
9

Duplicar posible:
What underlies this JavaScript idiom: var self = this?diferencia entre lo propio y esto en javascript y cuándo utilizar cualquiera de ellos

Estoy confundido que cuando el uso de auto y esto en javascript.
Sé que este se refiere al contexto actual y auto se refiere a la ventana actual.
Como estoy desarrollando una aplicación en titanio. Quiero saber cuándo utilizar auto o este o hace es que no hay ningún concepto de auto en el desarrollo de titanio.

aquí es el código de ejemplo que estoy haciendo en mi módulo CommonJS titanio

var auth = require('/SDKTest/auth'); 
var nodeAPI = require('/SDKTest/nodeAPI'); 
function myAPI() { 
    this.auth = auth; 
    this.nodeAPI = nodeAPI; 
    return this; 
    } 
module.exports = myAPI; 

Este código funciona, pero puedo usar auto en lugar de este ? Y en lugar de utilizar este puedo crear un espacio de nombres y hacer algo como esto:

function myAPI() { 
    var api = {}; 
    api.auth = auth; 
    api.nodeAPI = nodeAPI; 
    return api; 
    } 

tanto los enfoques funcionan pero ¿cuál es el uso de la utilización de este aquí

+0

Consulte http://stackoverflow.com/questions/337878/js-var-self-this –

+0

he actualizado mi pregunta añade un código de ejemplo de allí –

Respuesta

3

su pregunta es un tanto confuso, es como preguntar: ¿compro manzanas o tomates? La respuesta es que realmente depende de lo que quieras hacer, ya que son completamente diferentes.

Esencialmente, usted ha respondido a su propia pregunta, en cierta medida, debido a que ya conoce las diferencias entre los dos:

  • this se refiere al contexto actual
  • self se refiere a window
function myAPI() { 
    this.auth = auth; 
    this.nodeAPI = nodeAPI; 
    return this; 
    } 
module.exports = myAPI; 

Usted está preguntando si usted c un uso self en su lugar. Piénselo, ¿qué le permite hacer this? Te permite referirte al contexto. ¿Cuál es el contexto, bueno, es module cuando llamas al module.exports(). Y module es probable que no sea window, entonces no, no puede usar self aquí.

¿Eso responde la pregunta?

El segundo ejemplo de código parece hacer algo completamente diferente. No sé qué pensar de eso.

+0

@phantOm En segundo código ya solo queda creando mi propio espacio de nombres personalizado que contiene los objetos auth y nodeAPI –

+0

@AjeetPratapMaurya sí, lo veo. El caso es que es completamente diferente. Si tuviera que asignar ese a 'module.exports', devolvería' module.exports() 'a * new * object con los atributos' auth' y 'nodeAPI', en lugar de modificar' module' en sí, como el primero el código lo hace. – phant0m

8

self no es una palabra clave de JavaScript! Los programadores usan eso cuando definen clases para tener siempre una referencia válida al objeto en sí.

var Person = function() { 
    var self = this; 
    // private function 
    function say(what) { 
     alert(what); 
    } 
    self.fetchSomething = function() { 
     var xhr = Ti.Network.createHTTPClient({ 
      onload: function() { 
       // in this case 'this' is referencing to xhr!!! 
       say(this.responseText); 
      } 
     }); 
     xhr.open('GET', 'http://www.whatever.com'); 
     xhr.send(); 
    } 
    return self; 
} 
var p = new Person(); 
p.fetchSomething(); 
Cuestiones relacionadas