1 /* 2 * The contents of this file are subject to the Netscape Public 3 * License Version 1.1 (the "License"); you may not use this file 4 * except in compliance with the License. You may obtain a copy of 5 * the License at http://www.mozilla.org/NPL/ 6 * 7 * Software distributed under the License is distributed on an "AS 8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 9 * implied. See the License for the specific language governing 10 * rights and limitations under the License. 11 * 12 * The Original Code is mozilla.org code. 13 * 14 * The Initial Developer of the Original Code is Netscape 15 * Communications Corporation. Portions created by Netscape are 16 * Copyright (C) 1998 Netscape Communications Corporation. All 17 * Rights Reserved. 18 * 19 * Contributor(s): pschwartau (at) netscape.com 20 * Date: 14 Mar 2001 21 * 22 * SUMMARY: Utility functions for testing objects - 23 * 24 * Suppose obj is an instance of a native type, e.g. Number. 25 * Then obj.toString() invokes Number.prototype.toString(). 26 * We would also like to access Object.prototype.toString(). 27 * 28 * The difference is this: suppose obj = new Number(7). 29 * Invoking Number.prototype.toString() on this just returns 7. 30 * Object.prototype.toString() on this returns '[object Number]'. 31 * 32 * The getJSType() function below will return '[object Number]' for us. 33 * The getJSClass() function returns 'Number', the [[Class]] property of obj. 34 * See ECMA-262 Edition 3, 13-Oct-1999, Section 8.6.2 35 */ 36 //------------------------------------------------------------------------------------------------- 37 var cnNoObject = 'Unexpected Error!!! Parameter to this function must be an object'; 38 var cnNoClass = 'Unexpected Error!!! Cannot find Class property'; 39 var cnObjectToString = Object.prototype.toString; 40 41 42 // checks that it's safe to call findType() 43 function getJSType(obj) 44 { 45 if (isObject(obj)) 46 return findType(obj); 47 return cnNoObject; 48 } 49 50 51 // checks that it's safe to call findType() 52 function getJSClass(obj) 53 { 54 if (isObject(obj)) 55 return findClass(findType(obj)); 56 return cnNoObject; 57 } 58 59 60 function findType(obj) 61 { 62 return cnObjectToString.apply(obj); 63 } 64 65 66 // given '[object Number]', return 'Number' 67 function findClass(sType) 68 { 69 var re = /^\[.*\s+(\w+)\s*\]$/; 70 var a = sType.match(re); 71 72 if (a && a[1]) 73 return a[1]; 74 return cnNoClass; 75 } 76 77 78 function isObject(obj) 79 { 80 return obj instanceof Object; 81 } 82