var myObj = {
name:"mike",
go:function(){
console.log(this.name);
}
}
myObj.go() //logs out mike
setTimeout(this.myObj.go,200) //logs out (emptyString)
ответ
setTimeout(function(){
myObj.go();
},200);
Определить переменную ВЕ объекта перед:
var _this = this;
setTimeout(function() {_this.myObj.go();}, 200);
Это наиболее полный код решения, хотя OP, похоже, использует 'this' для ссылки на глобальный контекст, иначе переменная, объявленная через' var', вряд ли будет привязана к свойству объекта. –
@ FabrícioMatté Да, странная часть - это то, почему они ссылаются на это с помощью 'this', когда объявляют его с помощью' var'. Я думаю, этот метод был бы необходим, если бы «это» было чем-то специфичным для контекста и было необходимо. – Ian
@Ian Точно. '=]' Готовые ответы на чтение, время, чтобы потратить некоторые обороты. –
несколькими способами:
setTimeout(this.myObj.go.bind(this.myObj), 200);
или
var that = this;
setTimeout(function() {
that.myObj.go();
}, 200);
Обратите внимание, что .bind
не поддерживается в старых браузерах, поэтому для его поддержки может потребоваться полипол. Вот некоторая информация о методе: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind
Обратите внимание, что '.bind' был введен в ES5, поэтому для поддержки старых браузеров следует либо использовать вашу версию с помощью обертки функций, либо [' .bind' shim] (https://developer.mozilla.org/en- США/документы/JavaScript/Справочник/Global_Objects/Функция/связывающийся # Совместимость). –
@ FabrícioMatté Да, спасибо, что указали это - я не чувствовал себя вынужденным, чтобы включить это :) Мне интересно, когда настанет время, когда мы перестанем указывать, когда старые браузеры не поддерживают определенные методы. Наверное, никогда, поскольку люди будут использовать старый IE навсегда ... – Ian
Ну, думаю, я один из немногих, кто по-прежнему проводит бессонные ночи, исправляя мою страницу HTML5, чтобы отбросить IE6 (да, действительно), но хорошо, я считаю, t много использовать в поддержке IE <8, поэтому я медленно мигрирую и удаляю старые IE-хаки. Ни один из нас не хочет ограничивать себя использованием расширенных функций HTML5/CSS3 только из-за старого IE, поэтому моя методология теперь заключается в том, чтобы применять грамотную деградацию вплоть до верхних частей IE8. И да, IE8 не поддерживает '.bind()', и это создаст уродливое выполнение скрипта с ошибкой JS. ': P' –
var myObj = {
name:"mike",
go:function(){
console.log(this.name);
}
}
setTimeout(function(){myObj.go()},200)
Я избил вас до редактирования: P http://stackoverflow.com/posts/15889184/revisions – Doorknob
Ага, я видел это: P –
Попробуйте
var myObj = {
name:"mike",
go:function(){
console.log(this.name);
}
}
myObj.go(); //logs out mike
setTimeout(function(){
myObj.go(); //logs out mike too
},200);
Ваш код правильный минус несколько вещей.
setTimeout(this.myObj.go,200)
Должно быть
setTimeout(function() {myObj.go()},200)
Это было не определено, потому что this.myObj
не было в рамках SetTimeout и не было завернутые в анонимной функции или переменной функции. Вы были на правильном пути, хотя!
- 1. jQuery плагин, контекст и setTimeout
- 2. Как сделать идемпотент ссылкой на разыменование итератора
- 3. Как сделать строку ссылкой?
- 4. Как получить ссылку на родительский контекст объекта
- 5. Как очистить контекст объекта
- 6. Как отслеживать контекст управляемого объекта
- 7. Как сделать второй символ ссылкой на функцию
- 8. Как сделать MSBuild ссылкой на правильные сборки?
- 9. Javascript - сделать SetTimeout внутри SetTimeout, чтобы остановить
- 10. SetTimeout контекст закрытия использования в странном образе
- 11. Как сделать URL-текст ссылкой?
- 12. setTimeout() со строкой или (анонимной) ссылкой на функцию? speedwise
- 13. Возвращение объекта, созданного на куче константной ссылкой
- 14. Как сделать элемент SVG ссылкой?
- 15. Javascript контекст объекта
- 16. Java, нестатический не может быть ссылкой на статический контекст
- 17. javascript - сделать setTimeout быстрее?
- 18. Создание объекта со ссылкой на интерфейс
- 19. Сделать весь div ссылкой
- 20. Сделать целую таблицу ссылкой
- 21. Сделать входное значение ссылкой
- 22. Контекст закрытия объекта Javascript
- 23. Пасс ссылкой избегает объекта нарезка
- 24. Получить контекст объекта
- 25. Javascript, чтобы сделать изображения ссылкой на страницу
- 26. setTimeout для функции частного объекта
- 27. Как сделать скомпилированные кешированные запросы пережить контекст?
- 28. Как использовать «setTimeout» для вызова самого объекта
- 29. как сделать ссылку на int8_t ссылкой на uint8_t?
- 30. Сделать рельсы ресурсы система решает контекст для объекта
@adeneo Указатель 'this' не будет установлен таким образом (ну, он будет ссылаться на глобальный объект в нестрогом режиме). –
Возможный дубликат [Пропустить правильный «этот» контекст для вызова обратного вызоваTTimeout?] (Http://stackoverflow.com/questions/2130241/pass-correct-this-context-to-settimeout-callback) –
@adeneo Совершенно неправильно. –