2014-10-23 1 views
1

Я понимаю, что это бессмысленная вещь, но я не понимаю, почему она не работает.ECMA Script 6 Arrow функции как свойства объекта

var person = { 
    _name: "Steve", 
    doSomething:() => console.debug("Doing stuff with ", this._name) 
} 

«это» связано с глобальным объектом, а не с объектом, на который был вызван объект getName. Я ожидал, что выше эквивалентно:

var person = { 
    _name: "Steve", 
    doSomething: function() { console.debug("Doing stuff with ", this._name) } 
} 

(я знаю, что вы должны написать это)

var person = { 
    _name: "Steve", 
    doSomething() { 
     console.debug("Doing stuff with ", this._name) 
    } 
} 
+2

«Я знаю, что вы должны написать это так» - Нет, не стоит. – thefourtheye

+0

Странно: в Chrome версии 38.0.2125.104 (64-разрядная версия) 'this' все еще ссылается на объект' window'. – thefourtheye

+0

@thefourtheye уверен, что вы называете его 'person.getName()'? – simonzack

ответ

1

От mdn:

функции Стрелка захватить это значение охватывающий контекст

Это отличие nt к функциям.

+0

@RahilWazir О, я не видел «класс», я думал, что это функция. – thefourtheye

+0

Ах, ладно, спасибо. – Woody

+0

btw - допустимый синтаксис см. Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions – Woody