1/** 2 File Name: instanceof-002.js 3 Section: 4 Description: Determining Instance Relationships 5 6 This test is the same as js1_3/inherit/proto-002, except that it uses 7 the builtin instanceof operator rather than a user-defined function 8 called InstanceOf. 9 10 This tests Object Hierarchy and Inheritance, as described in the document 11 Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97 12 15:19:34 on http://devedge.netscape.com/. Current URL: 13 http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm 14 15 This tests the syntax ObjectName.prototype = new PrototypeObject using the 16 Employee example in the document referenced above. 17 18 Author: christine@netscape.com 19 Date: 12 november 1997 20*/ 21// onerror = err; 22 23 var SECTION = "instanceof-002"; 24 var VERSION = "ECMA_2"; 25 var TITLE = "Determining Instance Relationships"; 26 27 startTest(); 28 writeHeaderToLog( SECTION + " "+ TITLE); 29 30 var tc = 0; 31 var testcases = new Array(); 32 33function InstanceOf( object, constructor ) { 34 while ( object != null ) { 35 if ( object == constructor.prototype ) { 36 return true; 37 } 38 object = object.__proto__; 39 } 40 return false; 41} 42 43function Employee ( name, dept ) { 44 this.name = name || ""; 45 this.dept = dept || "general"; 46} 47 48function Manager () { 49 this.reports = []; 50} 51Manager.prototype = new Employee(); 52 53function WorkerBee ( name, dept, projs ) { 54 this.base = Employee; 55 this.base( name, dept) 56 this.projects = projs || new Array(); 57} 58WorkerBee.prototype = new Employee(); 59 60function SalesPerson () { 61 this.dept = "sales"; 62 this.quota = 100; 63} 64SalesPerson.prototype = new WorkerBee(); 65 66function Engineer ( name, projs, machine ) { 67 this.base = WorkerBee; 68 this.base( name, "engineering", projs ) 69 this.machine = machine || ""; 70} 71Engineer.prototype = new WorkerBee(); 72 73var pat = new Engineer() 74 75 testcases[tc++] = new TestCase( SECTION, 76 "pat.__proto__ == Engineer.prototype", 77 true, 78 pat.__proto__ == Engineer.prototype ); 79 80 testcases[tc++] = new TestCase( SECTION, 81 "pat.__proto__.__proto__ == WorkerBee.prototype", 82 true, 83 pat.__proto__.__proto__ == WorkerBee.prototype ); 84 85 testcases[tc++] = new TestCase( SECTION, 86 "pat.__proto__.__proto__.__proto__ == Employee.prototype", 87 true, 88 pat.__proto__.__proto__.__proto__ == Employee.prototype ); 89 90 testcases[tc++] = new TestCase( SECTION, 91 "pat.__proto__.__proto__.__proto__.__proto__ == Object.prototype", 92 true, 93 pat.__proto__.__proto__.__proto__.__proto__ == Object.prototype ); 94 95 testcases[tc++] = new TestCase( SECTION, 96 "pat.__proto__.__proto__.__proto__.__proto__.__proto__ == null", 97 true, 98 pat.__proto__.__proto__.__proto__.__proto__.__proto__ == null ); 99 100 testcases[tc++] = new TestCase( SECTION, 101 "pat instanceof Engineer", 102 true, 103 pat instanceof Engineer ); 104 105 testcases[tc++] = new TestCase( SECTION, 106 "pat instanceof WorkerBee )", 107 true, 108 pat instanceof WorkerBee ); 109 110 testcases[tc++] = new TestCase( SECTION, 111 "pat instanceof Employee )", 112 true, 113 pat instanceof Employee ); 114 115 testcases[tc++] = new TestCase( SECTION, 116 "pat instanceof Object )", 117 true, 118 pat instanceof Object ); 119 120 testcases[tc++] = new TestCase( SECTION, 121 "pat instanceof SalesPerson )", 122 false, 123 pat instanceof SalesPerson ); 124 test(); 125