javascript - 回调内部的属性
问题描述
在回调requestPermission内部我没有访问权限this。如何在我的课堂上调用方法 InstanciarZona()?
class PublisherPush{ ...
InstanciarZona(){
let data = {};
data.zona = this.Ad.GetZona()
data.dominio = this.Ad.GetDominio();
this.Ad.StartSockect();
socket.emit("conectado",data);
socket.on("Instanciar Zona",function(data){
if(debug == true) console.log('7- Zona de Push instanciada...','Carregando campanha...');
data.navigator = navigator.platform;
data.browser = BrowserDetect.browser;
data.os = BrowserDetect.OS;
socket.emit('Carregar Campanhas',data);
});
}
requestNotificationPermission(){
const permission = window.Notification.requestPermission(function(permission){
var notification = new Notification("Hi there!");
console.log('permission',permission,window);
switch(permission){
case 'granted':
this.InstanciarZona();
break;
default:
console.log('okay você não concedeu permissão');
}
return permission;
});
}
....
// 权限的值可以是 'granted'、'default'、'denied'
// 授予:用户已接受请求
// 默认值:用户通过单击 x 关闭了通知权限弹出窗口
// 拒绝:用户拒绝了请求。
解决方案
有两种主要方法可以做到这一点:
- 在回调之前添加
const that = this;
,然后使用that
而不是this
在回调内部。 - 不要使用
function
回调关键字,而是使用箭头函数,它没有自己的this
.
推荐阅读
- visual-studio-code - 如何在美人鱼中输入多个空格?
- ios - 如何在 iOS 上的 UIInputAccessoryView 下显示贴纸(或其他视图)?
- javascript - Angular 8 - 如何在资产静态文件中导入引导程序 4?
- javascript - php 变量 if else 语句
- javascript - 电子窗口尺寸与屏幕分辨率
- mysql - MySQL 过滤 Where if Column= NULL 或 Value
- azure - Azure AD B2C 图形 API 401 未经授权
- git - git log --all 在过滤器分支中不起作用
- c# - 测试像单元测试一样运行良好,但无法在测试资源管理器中运行(Appium 和 Specflow)
- python - 安装 Python 包时“在路上”是什么意思?