当前位置:网站首页>Typescript类方法this指针绑定
Typescript类方法this指针绑定
2022-07-28 21:36:00 【RemoteDev】
//类的this指针使用
class Log{
constructor() {
//为printX函数绑定当前类对象,解决调用this.print时找不到print方法
this.printX = this.printX.bind(this);
//通过箭头函数形式使this指针自动绑定方法
this.printY = ((y='y') => {
this.print(`this allow auto bind this,${y}`);
});
}
print(obj){
console.log(obj);
}
printX(x='a'){
this.print(`hi,${x}`);//使用了this指针
}
printY(x='a'){
this.print(`bind test :,${x}`);//使用了this指针
}
}
let l = new Log();
l.printX('HELLO');//可正常调用
//导出形式调用报错
const {printX,printY}=l;//从对象中导出
//printX调用的print方法找不到,this失效
//printX('WOW');//Cannot read properties of undefined (reading 'print')
//通过绑定this的形式解决,上面的构造函数中添加了函数绑定this对象
console.log('printX方法已绑定this指针,问题解决');
printX('WOW');
console.log('printY方法通过箭头函数自动绑定this指针,问题解决');
printY('===world===');
//通过代理器在获取函数方法时自动绑定this
function proxyAutoBindThis(obj){
let c = new WeakMap();//缓存
//代理器处理事件
let h = {
get (t,k){
let v = Reflect.get(t,k);
if (typeof v!=='function'){return v;}//不是函数不处理,直接返回
if (!c.has(v)){c.set(v,v.bind(t));}//不重复绑定
return c.get(v);//返回绑定了this的函数
}
};
let p = new Proxy(obj,h);//为传入的obj设置代理器
return p;//返回代理器对象
}
class A{
test(obj){
console.log(obj);
}
test1(obj=null){
this.test(`${obj}===>,test1`);//使用this指针
}
test2(obj=null){
this.test(`${obj}===>,test2`);//使用this指针
}
}
let a = new A();//实例化A对象a
let objBindThisByProxy = proxyAutoBindThis(a);//所有方法自动绑定this
let {test1,test2}=objBindThisByProxy;//从代理器导出
//类对象调用
a.test1('类对象调用');
a.test2('类对象调用');
//通过代理器调用
test1('通过代理器调用');
test2('通过代理器调用');边栏推荐
- [physical application] atmospheric absorption loss with matlab code
- Improvement 11 of yolov5: replace backbone network C3 with lightweight network mobilenetv3
- GCD implementation and arc, blocks, GCD usage examples
- Kotlin function nesting
- Leetcode 199. right view of binary tree
- Goer shares and Shanghai Taisi Weida growth cooperation agreement! Special SOC jointly promotes the development of TWS headphones
- 定了!哪吒S全系产品将于7月31日上市发售
- Cglib create proxy
- 终端输出g_debug()信息
- Symbol symbol type
猜你喜欢

Date time functions commonly used in MySQL

18 diagrams, intuitive understanding of neural networks, manifolds and topologies

Target detection notes -yolo

Basic concept of MySQL database and deployment of MySQL version 8.0 (I)
![[physical application] Wake induced dynamic simulation of underwater floating wind turbine wind field with matlab code](/img/31/e4cd4c261a7fc5cfa731976314530b.png)
[physical application] Wake induced dynamic simulation of underwater floating wind turbine wind field with matlab code

WebView optimization

Learning experience sharing 4: learning experience of yolov7

TypeError: can‘t convert cuda:0 device type tensor to numpy. Use Tensor. cpu() to copy the tensor to

Record a question about the order of trigonometric function exchange integrals
![[image segmentation] vein segmentation based on directional valley detection with matlab code](/img/82/7b7b761c975cd5c2f5b8f3e43592d2.png)
[image segmentation] vein segmentation based on directional valley detection with matlab code
随机推荐
【图像分割】基于方向谷形检测实现静脉纹路分割附MATLAB代码
Sqlilabs-1 (breakthrough record)
Improvement 17 of yolov5: cnn+transformer -- integrating bottleneck transformers
Advanced C language: pointer (3)
Nacos配置热更新的4种方式、读取项目配置文件的多种方式,@value,@RefreshScope,@NacosConfigurationProperties
软件测试面试笔试题及答案(软件测试题库)
2020年国内十大IC设计企业曝光!这五大产业挑战仍有待突破!
Kotlin function nesting
[physical application] Wake induced dynamic simulation of underwater floating wind turbine wind field with matlab code
No code development platform address book tutorial
Rouyi cloud platform - how to realize the launch and login functions of the project and how to create new modules
RouYi-Cloud平台 ---项目的启动、登录功能是怎么实现的、怎么样创建新模块
Anr questions often asked in Android interviews
Written questions and answers of software test interview (software test question bank)
【MongoDB】MongoDB数据库的基础使用,特殊情况以及Mongoose的安装和创建流程(含有Mongoose固定版本安装)
【雷达】基于核聚类实现雷达信号在线分选附matlab代码
c语言进阶篇:指针(三)
A simple neural network model based on MLP full connection layer
Pgbench benchmark PostgreSQL
MySQL foundation - advanced functions