1/** 2 * @constructor 3 */ 4Base = function() {} 5 6/** 7 * @constructor 8 * @extends {Base} 9 */ 10DerivedNoProto = function() {} 11 12/** 13 * @constructor 14 * @extends {Base} 15 */ 16DerivedBadProto = function() {} 17 18DerivedBadProto.prototype = { 19 __proto__: Base 20} 21 22/** 23 * @interface 24 */ 25InterfaceWithProto = function() {} 26 27InterfaceWithProto.prototype = { 28 __proto__: Base.prototype 29} 30 31/** 32 * @constructor 33 */ 34ProtoNoExtends = function() {} 35 36ProtoNoExtends.prototype = { 37 __proto__: Base.prototype 38} 39 40/** 41 * @constructor 42 * @extends {Base} 43 */ 44ProtoNotSameAsExtends = function() {} 45 46ProtoNotSameAsExtends.prototype = { 47 __proto__: Object.prototype 48} 49 50/** 51 * @constructor 52 * @extends {Base} 53 */ 54ProtoNotObjectLiteral = function() {} 55 56ProtoNotObjectLiteral.prototype = Object; 57 58/** 59 * @constructor 60 * @extends {Base} 61 */ 62DerivedNoSuperCall = function() { 63} 64 65DerivedNoSuperCall.prototype = { 66 __proto__: Base.prototype 67} 68 69/** 70 * @constructor 71 * @extends {Base} 72 */ 73DerivedBadSuperCall = function() { 74 Base.call(1); 75} 76 77DerivedBadSuperCall.prototype = { 78 __proto__: Base.prototype 79} 80 81/** 82 * @extends {Base} 83 */ 84GoodDerived = function() { 85 Base.call(this); 86} 87 88GoodDerived.prototype = { 89 __proto__: Base.prototype 90} 91 92/** 93 * @constructor 94 * @template T 95 */ 96var Set = function() {} 97 98Set.prototype = { 99 add: function(item) {}, 100 remove: function(item) {}, 101 /** @return {boolean} */ 102 contains: function(item) { return true; } 103} 104 105/** 106 * @constructor 107 * @extends {Set.<T>} 108 * @template T 109 */ 110var GoodSetSubclass = function() 111{ 112 Set.call(this); 113} 114 115GoodSetSubclass.prototype = { 116 __proto__: Set.prototype 117} 118 119/** 120 * @constructor 121 * @extends {Set.<T>} 122 * @template T 123 */ 124var BadSetSubclass = function() 125{ 126} 127 128BadSetSubclass.prototype = { 129} 130 131var NS = {}; 132 133/** 134 * @constructor 135 * @extends {Base} 136 */ 137NS.BadSubClass = function() {} 138