Javascript知識匯總------獲取構造函數名的方法和字符串處理方法
阿新 • • 發佈:2018-04-03
sta div rip 相同 javascrip rep AC 函數名 bsp
一、構造函數名稱獲取
每一個對象都有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)
Javascript知識匯總------獲取構造函數名的方法和字符串處理方法