¿Hay alguna diferencia entre estos dos:¿Cuál es la diferencia entre esos dos?
var test1 = function() {
this.method1 = function() {}
}
y
var test2 = function() {};
test2.method1 = function() {};
¿Hay alguna diferencia entre estos dos:¿Cuál es la diferencia entre esos dos?
var test1 = function() {
this.method1 = function() {}
}
y
var test2 = function() {};
test2.method1 = function() {};
El primer fragmento de toma this
objeto, lo que sea, y asigna una función a su ranura (campo) llamado method1
.this
pueden representar diferentes objetos, dependiendo de cómo test1
se llama:
test1()
- this
habrá window
new test1()
- this
se refiere a el objeto que está siendo creadocall
o apply
-test1.apply(someObject)
- this
se refiere al argumentoEl segundo fragmento toma el objeto test2
y asigna una función a su ranura denominada method1
.
La primera forma es un constructor que crea más objetos y necesita tener la new
palabra clave:
var mytest1 = new test1();
mytest1.method1();
La segunda forma está lista para usar de inmediato:
test2.method1();
Tenga en cuenta que 'test1' no es necesariamente un constructor. Se podría usar como uno, pero también podría estar destinado a ejecutarse en el contexto de un objeto existente. – apsillers
Suponiendo que la sintaxis era correcta, la primera es un constructor que da a todos los objetos test1 creados a través de new test1()
un método llamado method1. El segundo solo agrega una función al objeto constructor. En javascript, las funciones son objetos que pueden tener propiedades (incluidos los métodos).
La primera versión realmente crea un método disponible para todos los objetos instanciados de este modo:
var o = new test1();
o.test1();
El segundo simplemente adjunta una función como un atributo de la función test2. Si está familiarizado con otros lenguajes OO basados en clases, esto funciona como un método estático. No tendrá acceso al puntero this
en el segundo ejemplo.
La primera de ellas:
var test1 = function() {
this.method1 = function() {}
}
Define la función "test1". Una vez (y solo cuando) se llama "test1", "this.method1" se definirá como una función, que no hace nada.
El segundo:
var test2 = function() {};
test2.method1 = function() {};
crear la función "test2" y al mismo tiempo define la función "test2.method1", sin la necesidad de invocar la primera función.
El primero establece la propiedad method1 en lo que invoque test1().
El segundo define una función de vacío y establece la propiedad method1 en test2
Sí. Error de sintaxis: 'var test2 = function();' – diolemo
@diolemo Solucioné el error de sintaxis. – Triptych