/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /*--- defines: [getJSClass, findType, findClass, isObject] allow_unused: True ---*/ /* * 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 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; var GLOBAL = 'global'; // 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; }