/* * The contents of this file are subject to the Netscape Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): pschwartau@netscape.com * Date: 14 Mar 2001 * * SUMMARY: Utility functions for testing objects - * * Suppose obj is an instance of a native type, e.g. Number. * Then obj.toString() invokes Number.prototype.toString(). * We would also like to access Object.prototype.toString(). * * The difference is this: suppose obj = new Number(7). * Invoking Number.prototype.toString() on this just returns 7. * Object.prototype.toString() on this returns '[object Number]'. * * The getJSType() function below will return '[object Number]' for us. * The getJSClass() function returns 'Number', the [[Class]] property of obj. * See ECMA-262 Edition 3, 13-Oct-1999, Section 8.6.2 */ //------------------------------------------------------------------------------------------------- var cnNoObject = 'Unexpected Error!!! Parameter to this function must be an object'; var cnNoClass = 'Unexpected Error!!! Cannot find Class property'; var cnObjectToString = Object.prototype.toString; // checks that it's safe to call findType() function getJSType(obj) { if (isObject(obj)) return findType(obj); return cnNoObject; } // checks that it's safe to call findType() function getJSClass(obj) { if (isObject(obj)) return findClass(findType(obj)); return cnNoObject; } function findType(obj) { return cnObjectToString.apply(obj); } // given '[object Number]', return 'Number' function findClass(sType) { var re = /^\[.*\s+(\w+)\s*\]$/; var a = sType.match(re); if (a && a[1]) return a[1]; return cnNoClass; } function isObject(obj) { return obj instanceof Object; }