问题:@action.bound中的this指向

本文探讨了JavaScript中类方法的this指向问题,通过示例展示了@action.bound、箭头函数、普通函数及@action的区别。在直接调用fn5时,this指向undefined,而在响应式组件中调用时,this指向了ActionTest类。这揭示了JavaScript中函数作用域和this绑定的特性,特别是与装饰器observer的关系。

问题:@action.bound中的this指向

先看代码截图:
在这里插入图片描述

问题描述: 直接执行fn5函数,此时actionTest中返回的this指向undefined;将actionTest作为参数传入响应式组件Input,此时执行fn5函数发现this指向actionTest类
思考:与observer装饰器有没有关系???

对比@action, @action.bound, arrow fn, 普通函数

代码如下:

class ActionTest{
    fn1() {
        console.log('fn1', this);
    }
    fn2 = () => {
        console.log('fn2', this);
    }
    @action fn3() {
        console.log('fn3', this);
    }
    @action fn4 = () => {
        console.log('fn4', this);
    }
    @action.bound fn5() {
        console.log('fn5', this);
    }
    @action.bound fn6 = () => {
        console.log('fn6', this);
    }
}

执行后,查看返回值:
在这里插入图片描述

vivien@LAPTOP-E02M12PA:~/catkin_ws/src/try5/navigation_runner/scripts$ roslaunch navigation_runner planar_navigation.launch name:=navigation_node ... logging to /home/vivien/.ros/log/65ee585e-c268-11f0-b756-4ffba84d6709/roslaunch-LAPTOP-E02M12PA-15604.log Checking log directory for disk usage. This may take a while. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://LAPTOP-E02M12PA:41689/ SUMMARY ======== PARAMETERS * /fake_detector/color_distance: 5.0 * /fake_detector/history_size: 100 * /fake_detector/odom_topic: /odom * /fake_detector/target_obstacle: ['person', 'dynam... * /occupancy_map/body_to_camera: [0.0, 0.0, 1.0, 0... * /occupancy_map/clean_local_map: False * /occupancy_map/depth_filter_margin: 2 * /occupancy_map/depth_image_topic: /no_topic * /occupancy_map/depth_intrinsics: [554.254691191187... * /occupancy_map/depth_max_value: 5.0 * /occupancy_map/depth_min_value: 0.5 * /occupancy_map/depth_scale_factor: 10 * /occupancy_map/depth_skip_pixel: 2 * /occupancy_map/ground_height: -0.1 * /occupancy_map/image_cols: 640 * /occupancy_map/image_rows: 480 * /occupancy_map/local_bound_inflation: 3.0 * /occupancy_map/local_map_size: [5, 5, 3] * /occupancy_map/local_update_range: [5, 5, 5] * /occupancy_map/localization_mode: 1 * /occupancy_map/map_resolution: 0.1 * /occupancy_map/map_size: [60, 60, 5] * /occupancy_map/max_height_visualization: 4 * /occupancy_map/odom_topic: /odom * /occupancy_map/p_hit: 0.7 * /occupancy_map/p_max: 0.97 * /occupancy_map/p_min: 0.12 * /occupancy_map/p_miss: 0.35 * /occupancy_map/p_occ: 0.8 * /occupancy_map/pose_topic: /robot_pose * /occupancy_map/prebuilt_map_directory: /home/vivien/catk... * /occupancy_map/raycast_max_length: 5.0 * /occupancy_map/robot_size: [0.3, 0.3, 0.1] * /occupancy_map/sensor_input_mode: 0 * /occupancy_map/verbose: False * /occupancy_map/visualize_global_map: True * /rosdistro: noetic * /rosversion: 1.17.4 * /safe_action/max_height: 1.3 * /safe_action/min_height: 0.7 * /safe_action/safety_distance: 0.3 * /safe_action/time_horizon: 2.0 * /safe_action/time_step: 0.05 * /safe_action/use_safety_in_static: True NODES / fake_detector (onboard_detector/fake_detector_node) navigation_node (navigation_runner/navigation_node.py) occupancy_map (map_manager/occupancy_map_node) safe_action (navigation_runner/safe_action_node) ROS_MASTER_URI=http://localhost:11311 process[occupancy_map-1]: started with pid [15618] process[fake_detector-2]: started with pid [15619] process[safe_action-3]: started with pid [15620] process[navigation_node-4]: started with pid [15621] [Fake Detector]: No target obstacle param. Use default value. [Fake Detector]: No color distance param. Use default value: 5.0m. [SafeAction]: Prediction time horizon is set to: 2 [SafeAction]: Time step is set to 0.05 [Fake Detector]: No color distance param. Use default value: 5.0m. [SafeAction]: Min height is set to 0.7 [Fake Detector]: No odom topic param. Use default: /CERLAB/quadcopter/odom [SafeAction]: Max height is set to 1.3 [Fake Detector]: No tracking history size parameter found. Use default: 5. [SafeAction]: Safety distance is set to 6.36599e-314 [SafeAction]: Use safety in static is set to 1 [OccMap]: Sensor input mode: depth image (0)/pointcloud (1). Your option: 0 [OccMap]: Localizaiton mode: pose (0)/odom (1). Your option: 1 [OccMap]: Depth topic: /no_topic [OccMap]: No poincloud topic name. Use default: /camera/depth/points [OccMap]: Odom topic: /odom [OccMap]: robot size: [0.3, 0.3, 0.1] [OccMap]: fx, fy, cx, cy: [554.255, 554.255, 320.5, 240.5] [OccMap]: Depth scale factor: 10 [OccMap]: Depth min value: 0.5 [OccMap]: Depth depth max value: 5 [OccMap]: Depth filter margin: 2 [OccMap]: Depth skip pixel: 2 [OccMap]: Depth image columns: 640 [OccMap]: Depth image rows: 480 [OccMap]: Raycast max length: 5 [OccMap]: P hit: 0.7 [OccMap]: P miss: 0.35 [OccMap]: P min: 0.12 [OccMap]: P max: 0.97 [OccMap]: P occ: 0.8 [OccMap]: Map resolution: 0.1 [OccMap]: Ground height: -0.1 [OccMap]: Map size: [60, 60, 5] [OccMap]: Local update range: [5, 5, 5] [OccMap]: Local bound inflate: 3 [OccMap]: Clean local map option is set to: 0 [OccMap]: the prebuilt map absolute dir is found: /home/vivien/catkin_ws/src/try5/uav_simulator/worlds/generated_env/generated_env.pcd [OccMap]: Local map size: [5, 5, 3] [OccMap]: Max visualization height: 4 [OccMap]: Visualize map option. local (0)/global (1): 1 [OccMap]: Not display messages [pcl::PCDReader::read] Could not find file '/home/vivien/catkin_ws/src/try5/uav_simulator/worlds/generated_env/generated_env.pcd'. [OccMap]: No prebuilt map found/not using the prebuilt map. Cannot find primary config 'ground_robot'. Check that it's in your config search path. Config search path: provider=hydra, path=pkg://hydra.conf provider=main, path=file:///home/vivien/catkin_ws/src/try5/navigation_runner/scripts/cfg provider=schema, path=structured:// Set the environment variable HYDRA_FULL_ERROR=1 for a complete stack trace. [navigation_node-4] process has died [pid 15621, exit code 1, cmd /home/vivien/catkin_ws/src/try5/navigation_runner/scripts/navigation_node.py __name:=navigation_node __log:=/home/vivien/.ros/log/65ee585e-c268-11f0-b756-4ffba84d6709/navigation_node-4.log]. log file: /home/vivien/.ros/log/65ee585e-c268-11f0-b756-4ffba84d6709/navigation_node-4*.log
最新发布
11-17
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值