Aprendiendo los fundamentos de JavaScript, confundido sobre lo que devuelven las llamadas de función. Tengo una idea de que f.bar devuelve 7 porque cuando se crea el objeto f, obtiene acceso a las funciones de Foo que tienen la palabra clave "this". También creo que f.baz devuelve un error porque esta función solo está disponible localmente y no usa la palabra clave "esto", lo que hace que no esté disponible fuera de Foo. f.biz Estoy confundido, pero sé que la palabra clave Prototipo permite la herencia de las propiedades de Foo.
Una explicación para cada llamada de función sería increíble, ¡gracias a todos!
var Foo = function(a){ this.bar = () => { return a; } var baz = function(){ return a; } Foo.prototype = { biz: () => { return this.bar(); } } } var f = new Foo(7); f.bar();// what does this return? f.baz(); // what does this return? f.biz(); // what does this return?Tal como está ahora, solo la función de bar funcionará según lo previsto.
La función baz está en una variable local, por lo que solo es accesible dentro de la función Foo como baz pero no como this.baz (las variables y las propiedades de instancia ( this.whatever ) no están conectadas de ninguna manera).
El caso de biz es un poco más complicado. Normalmente, así es más o menos cómo crearía un método prototipo, pero lo hizo en el lugar equivocado. Debería estar fuera de la función, porque tal como está ahora, es:
new Foo() (innecesario)a en ella (que no debería), encontrará que siempre tiene la a de la llamada anterior) Tampoco desea utilizar una función de flecha cuando desea "dejar que JS configure this " (las funciones de flecha copian this desde donde se definieron).
Entonces, para que el biz funcione, debe hacer esto:
var Foo = function(a){ this.bar = () => { return a; } } Foo.prototype = { biz: function (){ return this.bar(); } } var f = new Foo(7); console.log(f.bar()); console.log(f.biz());