2015-08-17 2 views
3

У меня есть этот кодПонять «это» в функции обратного вызова

var a = ["a","a"] 
a.name = "a" 

unique(a) 
function unique(arr){ 
    arr.filter(function(e){ 
     console.log(this.name) // undefined 
    }) 
} 

Результат не определен, и мне интересно, что «это» со ссылкой на в этом случае и то, что я могу сделать, чтобы сделать «это. name "на самом деле печатать что-то вместо неопределенного?

ответ

5

Прочитайте documentation for Array#filter on MDN, чтобы понять, почему this не определено:

arr.filter (обратный вызов [, thisArg])

Если параметр thisArg предусмотрен для фильтрации, он будет передан обратного вызова при вызывается, для использования в качестве его значения. В противном случае значение undefined будет передано для использования в качестве его значения. Это значение, в конечном счете наблюдаемое обратным вызовом, определяется в соответствии с обычными правилами определения этого вида функции.

Вы должны установить thisArg явно давая Array#filter контекст через второй аргумент:

function unique(arr){ 
    arr.filter(function(e){ 
     console.log(this.name); 
    }, arr); 
} 
Смежные вопросы