/** File Name: instanceof-003.js ECMA Section: Description: http://bugzilla.mozilla.org/show_bug.cgi?id=7635 js> function Foo() {} js> theproto = {}; [object Object] js> Foo.prototype = theproto [object Object] js> theproto instanceof Foo true I think this should be 'false' Author: christine@netscape.com Date: 12 november 1997 The test case described above is correct, however the second test case in this file is not, 'o instanceof o' should thow an exception. According to ECMA-262: 8.6.2 Internal Properties and Methods: "... only Function objects implement [[HasInstance]]" 11.8.6 The instanceof operator: "6.If Result(4) does not have a [[HasInstance]] method, throw a TypeError exception." {} does not implement [[HasInstance]] (since it is not a function), so passing it as the constructor to be tested to instanceof should result in a TypeError being thrown. */ var SECTION = "instanceof-003"; var VERSION = "ECMA_2"; var TITLE = "instanceof operator"; var BUGNUMBER ="http://bugzilla.mozilla.org/show_bug.cgi?id=7635"; startTest(); function Foo() {}; theproto = {}; Foo.prototype = theproto; AddTestCase( "function Foo() = {}; theproto = {}; Foo.prototype = theproto; " + "theproto instanceof Foo", false, theproto instanceof Foo ); AddTestCase( "o = {}; o instanceof o", "EXCEPTION", (function(){ try { var o = {}; o instanceof o; return "no exception"; } catch (e) { return "EXCEPTION"; } } )() ); test();