Почему это не может быть примитивом?

Я возился с JavaScript и заметил, что this никогда не может быть примитивом. О чем я говорю? Позволь мне объяснить.

Возьмем, к примеру, эту функцию.

function test(){
    return typeof this;
}
test.call('Abc'); // 'object'
test.call(123); // 'object'

Они оба являются 'объектом' , а не 'строкой' или 'числом' , как я ожидал.

После некоторой путаницы (и возни с instanceof ) я понял, что происходит. 'Abc' преобразуется в объект String , а 123 преобразуется в объект Number .

В любом случае, у меня вопрос: почему это происходит и как мне преобразовать объект обратно в его примитив?

Я знаю, что могу использовать (String) this или (Number) это , но как я могу это сделать, если я не знаю тип?

РЕДАКТИРОВАТЬ : Я пытался сделать это:

function element(){
    var $e = $(this),
    $d = $e.closest('div');
}
element.call('#myID');

, но это не сработало. this является объектом String , а jQuery просто создал коллекцию объектов вместо использования селектора для поиска в DOM.

7
задан Rocket Hazmat 15 February 2012 в 17:46
поделиться