Veja a seguinte definição de objeto:
'Use Strict'var Jane = {Nome:' Jane ', Display: function () {RetUn' Pessoa nomeada ' + this.name; }};Isso vai ligar normalmente
Jane.display ();
A chamada a seguir causará um erro:
var func = jane.display; func ()
TypeError: Não é possível ler a propriedade 'Nome' de indefinido
Como este ponteiro mudou, a maneira correta é a seguinte:
var func2 = jane.display.bind (jane); func2 ()
'Penson chamado Jane'
Todas as funções têm suas variáveis especiais, como o foreach abaixo
var jane = {nome: 'Jane', amigos: ['Tarzan', 'Cheeta'], Sayhitofriends: function () {'use Strict'; this.friends.foreach (function (amigo) {// 'this' é indefinido aqui console.log (this.name + 'diz oi para' + amigo);}); }}Calling Sayshitofriends produzirá um erro:
Jane.sayhitofriends ()
TypeError: Não é possível ler a propriedade 'Nome' de indefinido
Solução 1: Salve isso em diferentes variáveis
var jane = {nome: 'Jane', amigos: ['Tarzan', 'Cheeta'], Sayhitofriends: function () {'use Strict'; var que = this; this.friends.foreach (function (amigo) {console.log (that.name + 'diz oi para' + amigo);}); }}Solução 2: use o segundo parâmetro de foreach, que pode especificar um valor para este
var jane = {nome: 'Jane', amigos: ['Tarzan', 'Cheeta'], Sayhitofriends: function () {'use Strict'; this.friends.foreach (function (amigo) {console.log (this.name + 'diz oi para' + amigo);}, isso); }}