1. 程式人生 > >Javascript知識匯總------獲取構造函數名的方法和字符串處理方法

Javascript知識匯總------獲取構造函數名的方法和字符串處理方法

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知識匯總------獲取構造函數名的方法和字符串處理方法