/******************************************************************************* * Copyright (c) 2007, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: *     IBM Corporation - initial API and implementation ****************************************************************************** * **//**  * Object children()  * @type children  * @super Array  * @memberOf children  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537446.aspx*/function children(){};children.prototype= new Array();/**  * Property length  * @type Number  * @returns {Number}
  * @memberOf children  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms534101.aspx*/children.prototype.length=0;/**  * function item(vIndex)  * @param {Number} vIndex  * @memberOf children  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536609.aspx*/children.prototype.item=function(vIndex){};/**  * function item(vIndex)  * @param {Number} vIndex  * @memberOf children  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536609.aspx*/children.prototype.item=function(vIndex){};/**  * Property childNodes  * @type childNodes  * @returns {childNodes}
  * @memberOf children  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms537445.aspx*/children.prototype.childNodes= new childNodes();/**  * function tags(sTag)  * @param {Variant} sTag  * @memberOf children  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536776.aspx*/children.prototype.tags=function(sTag){};/**  * function urns(sUrn)  * @param {String} sUrn  * @memberOf children  * @since JScript 5.6  * @see http://msdn2.microsoft.com/en-us/library/ms536780.aspx*/children.prototype.urns=function(sUrn){};