2015-05-31 2 views
1

Я новичок в Node.js. Я искал форум, но не мог найти аналогичный вопрос. Вот проблема, с которой я столкнулся. Следующий код работает нормально.Назначение функций не работает

process.stdout.write("hello world!\n"); 

но следующий код:

var myprint = process.stdout.write; 
myprint("hello world"); 

генерирует следующее сообщение об ошибке:

TypeError: Cannot read property 'defaultEncoding' of undefined 

Любые предложения? Огромное спасибо.

+0

Что произойдет, если вы напишете myprint.apply (process.stdout, ["hello world"])? –

ответ

2

Возможно, метод write() должен быть вызван с правильной ссылкой на объект, поэтому метод write() знает, к какому потоку он пишет. Существует много способов обойти это. Вот один из способов:

var myprint = process.stdout.write.bind(process.stdout); 
myprint("hello world"); 

Смотрите .bind() on MDN для получения дополнительной информации.

Для дальнейшего использования, когда вы делаете:

var myprint = process.stdout.write; 

myprint содержит только ссылку на метод write и этот метод тогда вызывается без ссылки на объект. Это означает, что указатель this внутри метода write() не будет указывать на поток stdout, как если бы вы его назвали process.stdout.write(). Если для этого метода нужны данные экземпляра (что делает большинство методов), это создает проблему. Вы можете «привязать» ссылку на объект к новой временной функции с помощью .bind(), которая позволяет назначить ее другой переменной, а затем использовать ее так же, как вы пытались сделать.

2

write функция пытается получить доступ к переменной на this переменной, которая не установлена ​​на process.stdout при вызове myprint, в отличие от, когда вы звоните process.stdout.write.

Обратите внимание, что

var out = process.stdout; 
out.print('wow\n'); 

будет работать, как ожидалось.

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