Consulte la siguiente definición del objeto:
'Use strict'var jane = {name:' jane ', display: function () {retun' persona llamada ' + this.name; }};Esto llamará normalmente
Jane.display ();
La siguiente llamada causará un error:
var func = jane.display; func ()
TypeError: no se puede leer 'nombre' de la propiedad de indefinido
Debido a que este puntero ha cambiado, la forma correcta es la siguiente:
var func2 = jane.display.bind (Jane); func2 ()
'Penson llamado Jane'
Todas las funciones tienen sus variables especiales, como el foreach a continuación
var jane = {nombre: 'Jane', Friends: ['Tarzan', 'Cheeta'], SayhitoFriends: function () {'Use Strict'; this.friends.foreach (function (amigo) {// 'this' está indefinido aquí console.log (this.name + 'dice hola a' + amigo);}); }}Llamar a SayshitoFriends producirá un error:
Jane.sayhitofriends ()
TypeError: no se puede leer 'nombre' de la propiedad de indefinido
Solución 1: Guardar esto en diferentes variables
var jane = {nombre: 'Jane', Friends: ['Tarzan', 'Cheeta'], SayhitoFriends: function () {'Use Strict'; var que = esto; this.friends.forEach (function (amigo) {console.log (que.name + 'dice hola a' + amigo);}); }}Solución 2: use el segundo parámetro de foreach, que puede especificar un valor a este
var jane = {nombre: 'Jane', Friends: ['Tarzan', 'Cheeta'], SayhitoFriends: function () {'Use Strict'; this.friends.forEach (function (amigo) {console.log (this.name + 'dice hola a' + amigo);}, esto); }}