Javascript基类(BaseScene)获取子类类名(任意继承自BaseScene的类)的方法

// 直接上函数(这边的obj指的是子类的this):

protected getClassName(obj) {
        if (obj && obj.constructor && obj.constructor.toString()) {
            if(obj.constructor.name) {
                return obj.constructor.name;
            }
            let str = obj.constructor.toString();
            let arr;
            if(str.charAt(0) == '[')
            {
                arr = str.match(/\[\w+\s*(\w+)\]/);
            } else {
                arr = str.match(/function\s*(\w+)/);
            }
            if (arr && arr.length == 2) {
                return arr[1];
            }
        }
        return undefined; 
    }

完整基类代码如下:

import { Alert } from 'react-native';
import React, { Component } from 'react';
import OAColor from '../theme/OAColor';
import { RunAfterInteractions } from '../utils';
import { IBText } from '../components/IBText';
import CommonSceneTools from '../widget/CommonSceneTools';
import { computeTraceCost } from '../common';
import { interfaceAdd } from '../services/system';
import routerConfig from '../../router';

export default class BaseScene extends Component<Props, State> {

    constructor(props) {
        super(props);
        mb(this).init(props, {
            startTime: Date.now(),
        });
    }
    getClassName(obj) {
        if (obj && obj.constructor && obj.constructor.toString()) {
            if (obj.constructor.name) {
                return obj.constructor.name;
            }
            let str = obj.constructor.toString();
            let arr;
            if (str.charAt(0) == '[') {
                arr = str.match(/\[\w+\s*(\w+)\]/);
            } else {
                arr = str.match(/function\s*(\w+)/);
            }
            if (arr && arr.length == 2) {
                return arr[1];
            }
        }
        return undefined;
    }

    componentWillMount() {
        this.setState({ startTime: Date.now() });
    }

    componentWillUnmount() {
        const className = this.getClassName(this); // 基类中获取当前调用基类的类的类名
        // console.log('XXXXXXXXXXXXXX', this.getClassName(this));
        let title = '';
        routerConfig.forEach(route => {
            if (route.sceneName === className) {
                title = route[title];
            }
        });
        const cost = computeTraceCost(this.state.startTime);

        if (title !== '' && cost) {
            interfaceAdd('', 'page', 'app', title, cost);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值