// 直接上函数(这边的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);
}
}
}