一、构造函数名称获取
每一个对象都有constructor属性
每一个对象的constructor 属性描述的是其构造函数
function Fn(){} var obj = new Fn(); console.log( obj.constructor === Fn ); // true 对象的constructor属性描述的就是其构造函数
下面代码所用的obj对象就是在此处创建的
1. 利用字符串截取获取构造函数名称
//利用字符串截取获取 var str = ‘‘+obj.constructor; var str1 = str.replace(‘function‘,‘|‘);//先将function字符用 | 代替,方便截取 var startIndex = str1.indexOf(‘|‘); //找到字符串截取开始索引 var endIndex = str1.indexOf(‘(‘); //找到字符串截取结尾索引 if( startIndex != -1 && endIndex != -1 ){ var name = str1.slice( startIndex+2,endIndex ); console.log(name); }
2. 利用正则表达式获取构造函数名称
//利用正则表达式获取 var reg = /function (.+)\(/; var name1 = reg.exec(str); console.log(name1);
3.利用对象name属性获取构造函数名称
//用name属性获取constructor console.log(obj.constructor.name);//ie8以下不支持
综合上面3种方法,ie8以下浏览器只能使用字符串截取已经正则表达式方法获得,而高级浏览器则3种方法都行,故需要对浏览器进行性能检测后做出兼容
//兼容所有浏览器获得构造函数名称 function getFnName(fn){ /* if(typeof fn !== ‘function‘) return; return fn.name ? fn.name: /function (.+)\(/.exec(fn + ‘‘)[1]; */ /* if(typeof fn !== ‘function‘) return; return fn.name || /function (.+)\(/.exec(fn + ‘‘)[1]; */ return typeof fn !== ‘function‘? undefined: fn.name || /function (.+)\(/.exec(fn + ‘‘)[1]; } function PersonWu(){} var obj2 = new PersonWu(); var name = getFnName(obj2.constructor); console.log(name);//PersonWu
二、字符串方法
var string = ‘123abc456‘; var i = 3; //substring(startIndex,length) == substr 用法相同 console.log(string.substring(0,i));//123 若传两个参数表示从左边开始从索引值0开始提取前i个字符 console.log(string.substring(i)); //456 若传一个参数代表从左边开始第i个截取至最右侧 //slice(startIndex,enIndex) console.log(string.slice(0,i)) //包左不包右,-1代表右侧第一位 //string.replace(regexp/substr,replacement)