2015-11-04 2 views
0

Я знаю, что есть функции стрелок ES6, которые решают это, но это не вопрос. Я не знаю, почему это не работает? Кажется, я где-то слышал, что это ошибка в оформлении языков. Я хочу знать базовый механизм, почему это не работает или какие-то полезные ссылки об этом.это во внутренней функции объекта метод

var test = { 
    firstname: 'David', 
    fn: function() { 

    return ['one', 'two', 'tree'].map(function() { 
     this.firstname; // why is this undefined? 

    }) 
    } 
} 
console.log(test.fn()); 

ответ

2

Внутри вас Array.prototype.map функцию это ссылки на объект окна. Чтобы исправить это, вы можете связать его, как показано ниже:

var test = { 
    firstname: 'David', 
    fn: function() { 

    return ['one', 'two', 'tree'].map(function() { 
     console.log(this.firstname); // and now it will be your expected result 

    }.bind(this)) 
    } 
} 

Fiddle, также here ссылка о Function.prototype.bind метод

Я надеюсь, что это поможет вам

+0

да, TNX! Почему Дуглас Крокфорд говорит, что это ошибка в языковом дизайне? – SSS

+0

[Здесь] (https://nemisj.com/js-without-new-and-this/), часть ** Подмена подменю & почему нет «этого» использования ** хорошее объяснение вокруг ключевого слова _this_ –

Смежные вопросы