<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.wbex.ru/index.php?action=history&amp;feed=atom&amp;title=JavaScript_Tutorial%2FObject_Oriented%2FzInherit</id>
		<title>JavaScript Tutorial/Object Oriented/zInherit - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.wbex.ru/index.php?action=history&amp;feed=atom&amp;title=JavaScript_Tutorial%2FObject_Oriented%2FzInherit"/>
		<link rel="alternate" type="text/html" href="http://www.wbex.ru/index.php?title=JavaScript_Tutorial/Object_Oriented/zInherit&amp;action=history"/>
		<updated>2026-04-21T13:56:38Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.wbex.ru/index.php?title=JavaScript_Tutorial/Object_Oriented/zInherit&amp;diff=8475&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.wbex.ru/index.php?title=JavaScript_Tutorial/Object_Oriented/zInherit&amp;diff=8475&amp;oldid=prev"/>
				<updated>2010-05-26T08:24:19Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 08:24, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.wbex.ru/index.php?title=JavaScript_Tutorial/Object_Oriented/zInherit&amp;diff=8474&amp;oldid=prev</id>
		<title> в 18:52, 25 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.wbex.ru/index.php?title=JavaScript_Tutorial/Object_Oriented/zInherit&amp;diff=8474&amp;oldid=prev"/>
				<updated>2010-05-25T18:52:56Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Using inheritFrom method from zInherit Library==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Example&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
/*------------------------------------------------------------------------------&lt;br /&gt;
 * JavaScript zInherit Library&lt;br /&gt;
 * Version 1.0&lt;br /&gt;
 * by Nicholas C. Zakas, http://www.nczonline.net/&lt;br /&gt;
 * Copyright (c) 2004-2005 Nicholas C. Zakas. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * This program is free software; you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU Lesser General Public License as published by&lt;br /&gt;
 * the Free Software Foundation; either version 2.1 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This program is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU Lesser General Public License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public License&lt;br /&gt;
 * along with this program; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA&lt;br /&gt;
 *------------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * Inherits properties and methods from the given class.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @param fnClass The constructor function to inherit from.&lt;br /&gt;
 */&lt;br /&gt;
Object.prototype.inheritFrom = function (fnClass /*: Function */) /*:void*/ {&lt;br /&gt;
    /**&lt;br /&gt;
     * Inherits all classes going up the inheritance chain recursively.&lt;br /&gt;
     * @param fnClass The class to inherit from.&lt;br /&gt;
     * @param arrClasses The array of classes to build up.&lt;br /&gt;
     * @scope private&lt;br /&gt;
     */&lt;br /&gt;
    function inheritClasses(fnClass /*:Function*/, &lt;br /&gt;
                            arrClasses /*:Array*/) /*:void*/ {&lt;br /&gt;
        &lt;br /&gt;
        arrClasses.push(fnClass);&lt;br /&gt;
        if (typeof fnClass.__superclasses__ == &amp;quot;object&amp;quot;) {&lt;br /&gt;
            for (var i=0; i &amp;lt; fnClass.__superclasses__.length; i++){&lt;br /&gt;
                inheritClasses(fnClass.__superclasses__[i], arrClasses);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (typeof this.constructor.__superclasses__ == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
        this.constructor.__superclasses__ = new Array();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    inheritClasses(fnClass, this.constructor.__superclasses__);&lt;br /&gt;
    &lt;br /&gt;
    for (prop in fnClass.prototype) {&lt;br /&gt;
        if (typeof fnClass.prototype[prop] == &amp;quot;function&amp;quot;) {&lt;br /&gt;
            this[prop] = fnClass.prototype[prop];&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Determines if the given object is an instance of a given class.&lt;br /&gt;
 * This method is necessary because using {@link #inheritFrom} renders&lt;br /&gt;
 * the JavaScript &amp;lt;code&amp;gt;instanceof&amp;lt;/code&amp;gt; operator useless.&lt;br /&gt;
 * @param fnClass The constructor function to test.&lt;br /&gt;
 * @return True if the object is an instance of the class, false if not.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 */&lt;br /&gt;
Object.prototype.instanceOf = function (fnClass /*:Function*/) /*: boolean */ {&lt;br /&gt;
    if (this.constructor == fnClass) {&lt;br /&gt;
        return true;&lt;br /&gt;
    } else if (typeof this.constructor.__superclasses__ == &amp;quot;object&amp;quot;) {&lt;br /&gt;
        for (var i=0; i &amp;lt; this.constructor.__superclasses__.length; i++) {&lt;br /&gt;
            if (this.constructor.__superclasses__[i] == fnClass) {&lt;br /&gt;
                return true;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return false;&lt;br /&gt;
    } else {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ClassX() {&lt;br /&gt;
    this.messageX = &amp;quot;This is the X message.&amp;quot;;&lt;br /&gt;
    if (typeof ClassX._initialized == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
        &lt;br /&gt;
        ClassX.prototype.sayMessageX = function () {&lt;br /&gt;
            alert(this.messageX);&lt;br /&gt;
        };&lt;br /&gt;
        ClassX._initialized = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
function ClassY() {&lt;br /&gt;
    this.messageY = &amp;quot;This is the Y message.&amp;quot;;&lt;br /&gt;
    if (typeof ClassY._initialized == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
        &lt;br /&gt;
        ClassY.prototype.sayMessageY = function () {&lt;br /&gt;
            alert(this.messageY);&lt;br /&gt;
        };&lt;br /&gt;
        ClassY._initialized = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
function ClassZ() {&lt;br /&gt;
    ClassX.apply(this);&lt;br /&gt;
    ClassY.apply(this);&lt;br /&gt;
    this.messageZ = &amp;quot;This is the Z message.&amp;quot;;&lt;br /&gt;
    if (typeof ClassZ._initialized == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
        &lt;br /&gt;
        ClassZ.prototype.inheritFrom(ClassX);&lt;br /&gt;
        ClassZ.prototype.inheritFrom(ClassY);&lt;br /&gt;
        ClassZ.prototype.sayMessageZ = function () {&lt;br /&gt;
            alert(this.messageZ);&lt;br /&gt;
        };&lt;br /&gt;
        ClassZ._initialized = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
var objZ = new ClassZ();&lt;br /&gt;
objZ.sayMessageX();&lt;br /&gt;
objZ.sayMessageY();&lt;br /&gt;
objZ.sayMessageZ();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Using instanceOf method from zInherit Library==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Example&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
/*------------------------------------------------------------------------------&lt;br /&gt;
 * JavaScript zInherit Library&lt;br /&gt;
 * Version 1.0&lt;br /&gt;
 * by Nicholas C. Zakas, http://www.nczonline.net/&lt;br /&gt;
 * Copyright (c) 2004-2005 Nicholas C. Zakas. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * This program is free software; you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU Lesser General Public License as published by&lt;br /&gt;
 * the Free Software Foundation; either version 2.1 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This program is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU Lesser General Public License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public License&lt;br /&gt;
 * along with this program; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA&lt;br /&gt;
 *------------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * Inherits properties and methods from the given class.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @param fnClass The constructor function to inherit from.&lt;br /&gt;
 */&lt;br /&gt;
Object.prototype.inheritFrom = function (fnClass /*: Function */) /*:void*/ {&lt;br /&gt;
    /**&lt;br /&gt;
     * Inherits all classes going up the inheritance chain recursively.&lt;br /&gt;
     * @param fnClass The class to inherit from.&lt;br /&gt;
     * @param arrClasses The array of classes to build up.&lt;br /&gt;
     * @scope private&lt;br /&gt;
     */&lt;br /&gt;
    function inheritClasses(fnClass /*:Function*/, &lt;br /&gt;
                            arrClasses /*:Array*/) /*:void*/ {&lt;br /&gt;
        &lt;br /&gt;
        arrClasses.push(fnClass);&lt;br /&gt;
        if (typeof fnClass.__superclasses__ == &amp;quot;object&amp;quot;) {&lt;br /&gt;
            for (var i=0; i &amp;lt; fnClass.__superclasses__.length; i++){&lt;br /&gt;
                inheritClasses(fnClass.__superclasses__[i], arrClasses);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (typeof this.constructor.__superclasses__ == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
        this.constructor.__superclasses__ = new Array();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    inheritClasses(fnClass, this.constructor.__superclasses__);&lt;br /&gt;
    &lt;br /&gt;
    for (prop in fnClass.prototype) {&lt;br /&gt;
        if (typeof fnClass.prototype[prop] == &amp;quot;function&amp;quot;) {&lt;br /&gt;
            this[prop] = fnClass.prototype[prop];&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Determines if the given object is an instance of a given class.&lt;br /&gt;
 * This method is necessary because using {@link #inheritFrom} renders&lt;br /&gt;
 * the JavaScript &amp;lt;code&amp;gt;instanceof&amp;lt;/code&amp;gt; operator useless.&lt;br /&gt;
 * @param fnClass The constructor function to test.&lt;br /&gt;
 * @return True if the object is an instance of the class, false if not.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 */&lt;br /&gt;
Object.prototype.instanceOf = function (fnClass /*:Function*/) /*: boolean */ {&lt;br /&gt;
    if (this.constructor == fnClass) {&lt;br /&gt;
        return true;&lt;br /&gt;
    } else if (typeof this.constructor.__superclasses__ == &amp;quot;object&amp;quot;) {&lt;br /&gt;
        for (var i=0; i &amp;lt; this.constructor.__superclasses__.length; i++) {&lt;br /&gt;
            if (this.constructor.__superclasses__[i] == fnClass) {&lt;br /&gt;
                return true;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return false;&lt;br /&gt;
    } else {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
function Shape(iSides) {&lt;br /&gt;
    this.sides  = iSides;&lt;br /&gt;
    &lt;br /&gt;
    if (typeof Shape._initialized == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
        Shape.prototype.getArea = function () {&lt;br /&gt;
            return 0;&lt;br /&gt;
        };    &lt;br /&gt;
        &lt;br /&gt;
        Shape._initialized = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
function Triangle(iBase, iHeight) {&lt;br /&gt;
    Shape.call(this, 3);&lt;br /&gt;
    this.base = iBase;&lt;br /&gt;
    this.height = iHeight;&lt;br /&gt;
    &lt;br /&gt;
    if (typeof Triangle._initialized == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
        &lt;br /&gt;
        Triangle.prototype.inheritFrom(Shape);&lt;br /&gt;
        Triangle.prototype.getArea = function () {&lt;br /&gt;
            return 0.5 * this.base * this.height;&lt;br /&gt;
        };    &lt;br /&gt;
        &lt;br /&gt;
        Triangle._initialized = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
function Rectangle(iLength, iWidth) {&lt;br /&gt;
    Shape.call(this, 4);&lt;br /&gt;
    this.length = iLength;&lt;br /&gt;
    this.width = iWidth;&lt;br /&gt;
    &lt;br /&gt;
    if (typeof Rectangle._initialized == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
    &lt;br /&gt;
        Rectangle.prototype.inheritFrom(Shape);&lt;br /&gt;
        Rectangle.prototype.getArea = function () {&lt;br /&gt;
            return this.length * this.width;&lt;br /&gt;
        };    &lt;br /&gt;
        &lt;br /&gt;
        Rectangle._initialized = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var triangle = new Triangle(12, 4);&lt;br /&gt;
var rectangle = new Rectangle(22, 10);&lt;br /&gt;
alert(triangle.sides);&lt;br /&gt;
alert(triangle.getArea());&lt;br /&gt;
alert(rectangle.sides);&lt;br /&gt;
alert(rectangle.getArea());&lt;br /&gt;
alert(triangle.instanceOf(Triangle));&lt;br /&gt;
alert(triangle.instanceOf(Shape));&lt;br /&gt;
alert(rectangle.instanceOf(Rectangle));&lt;br /&gt;
alert(rectangle.instanceOf(Shape));&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Using zInherit Library to build class inheritance==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The zInherit library adds two methods to the Object class: inheritFrom() and instanceOf().&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The following line uses prototype chaining to inherit methods from BaseClass to SubClass:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
SubClass.prototype = new BaseClass();&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Using zInherit Library to build class inheritance in three levels==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Example&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
/*------------------------------------------------------------------------------&lt;br /&gt;
 * JavaScript zInherit Library&lt;br /&gt;
 * Version 1.0&lt;br /&gt;
 * by Nicholas C. Zakas, http://www.nczonline.net/&lt;br /&gt;
 * Copyright (c) 2004-2005 Nicholas C. Zakas. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * This program is free software; you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU Lesser General Public License as published by&lt;br /&gt;
 * the Free Software Foundation; either version 2.1 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This program is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU Lesser General Public License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public License&lt;br /&gt;
 * along with this program; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA&lt;br /&gt;
 *------------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * Inherits properties and methods from the given class.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 * @param fnClass The constructor function to inherit from.&lt;br /&gt;
 */&lt;br /&gt;
Object.prototype.inheritFrom = function (fnClass /*: Function */) /*:void*/ {&lt;br /&gt;
    /**&lt;br /&gt;
     * Inherits all classes going up the inheritance chain recursively.&lt;br /&gt;
     * @param fnClass The class to inherit from.&lt;br /&gt;
     * @param arrClasses The array of classes to build up.&lt;br /&gt;
     * @scope private&lt;br /&gt;
     */&lt;br /&gt;
    function inheritClasses(fnClass /*:Function*/, &lt;br /&gt;
                            arrClasses /*:Array*/) /*:void*/ {&lt;br /&gt;
        &lt;br /&gt;
        arrClasses.push(fnClass);&lt;br /&gt;
        if (typeof fnClass.__superclasses__ == &amp;quot;object&amp;quot;) {&lt;br /&gt;
            for (var i=0; i &amp;lt; fnClass.__superclasses__.length; i++){&lt;br /&gt;
                inheritClasses(fnClass.__superclasses__[i], arrClasses);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (typeof this.constructor.__superclasses__ == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
        this.constructor.__superclasses__ = new Array();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    inheritClasses(fnClass, this.constructor.__superclasses__);&lt;br /&gt;
    &lt;br /&gt;
    for (prop in fnClass.prototype) {&lt;br /&gt;
        if (typeof fnClass.prototype[prop] == &amp;quot;function&amp;quot;) {&lt;br /&gt;
            this[prop] = fnClass.prototype[prop];&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Determines if the given object is an instance of a given class.&lt;br /&gt;
 * This method is necessary because using {@link #inheritFrom} renders&lt;br /&gt;
 * the JavaScript &amp;lt;code&amp;gt;instanceof&amp;lt;/code&amp;gt; operator useless.&lt;br /&gt;
 * @param fnClass The constructor function to test.&lt;br /&gt;
 * @return True if the object is an instance of the class, false if not.&lt;br /&gt;
 * @scope public&lt;br /&gt;
 */&lt;br /&gt;
Object.prototype.instanceOf = function (fnClass /*:Function*/) /*: boolean */ {&lt;br /&gt;
    if (this.constructor == fnClass) {&lt;br /&gt;
        return true;&lt;br /&gt;
    } else if (typeof this.constructor.__superclasses__ == &amp;quot;object&amp;quot;) {&lt;br /&gt;
        for (var i=0; i &amp;lt; this.constructor.__superclasses__.length; i++) {&lt;br /&gt;
            if (this.constructor.__superclasses__[i] == fnClass) {&lt;br /&gt;
                return true;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return false;&lt;br /&gt;
    } else {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function Shape(iSides) {&lt;br /&gt;
    this.sides  = iSides;&lt;br /&gt;
}&lt;br /&gt;
Shape.prototype.getArea = function () {&lt;br /&gt;
    return 0;&lt;br /&gt;
};    &lt;br /&gt;
function Triangle(iBase, iHeight) {&lt;br /&gt;
    Shape.call(this, 3);&lt;br /&gt;
    this.base = iBase;&lt;br /&gt;
    this.height = iHeight;&lt;br /&gt;
}&lt;br /&gt;
Triangle.prototype.inheritFrom(Shape);&lt;br /&gt;
Triangle.prototype.getArea = function () {&lt;br /&gt;
    return 0.5 * this.base * this.height;&lt;br /&gt;
};    &lt;br /&gt;
function Rectangle(iLength, iWidth) {&lt;br /&gt;
    Shape.call(this, 4);&lt;br /&gt;
    this.length = iLength;&lt;br /&gt;
    this.width = iWidth;&lt;br /&gt;
}&lt;br /&gt;
Rectangle.prototype.inheritFrom(Shape);&lt;br /&gt;
Rectangle.prototype.getArea = function () {&lt;br /&gt;
    return this.length * this.width;&lt;br /&gt;
};    &lt;br /&gt;
var triangle = new Triangle(12, 4);&lt;br /&gt;
var rectangle = new Rectangle(22, 10);&lt;br /&gt;
alert(triangle.sides);&lt;br /&gt;
alert(triangle.getArea());&lt;br /&gt;
alert(rectangle.sides);&lt;br /&gt;
alert(rectangle.getArea());&lt;br /&gt;
alert(triangle.instanceOf(Triangle));&lt;br /&gt;
alert(triangle.instanceOf(Shape));&lt;br /&gt;
alert(rectangle.instanceOf(Rectangle));&lt;br /&gt;
alert(rectangle.instanceOf(Shape));&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>