Path: csiph.com!usenet.pasdenom.info!news.franciliens.net!news.muarf.org!nntpfeed.proxad.net!proxad.net!feeder1-1.proxad.net!217.188.199.168.MISMATCH!takemy.news.telefonica.de!telefonica.de!newsfeed.arcor.de!newsspool1.arcor-online.net!news.arcor.de.POSTED!not-for-mail Content-Type: text/plain; charset="UTF-8" Message-ID: <1991992.lvnxbIPBPy@PointedEars.de> From: Thomas 'PointedEars' Lahn Reply-To: Thomas 'PointedEars' Lahn Organization: PointedEars Software (PES) Date: Tue, 11 Feb 2014 13:39:07 +0100 User-Agent: KNode/4.11.3 Content-Transfer-Encoding: 8Bit X-Face: %i>XG-yXR'\"2P/C_aO%~;2o~?g0pPKmbOw^=NT`tprDEf++D.m7"}HW6.#=U:?2GGctkL,f89@H46O$ASoW&?s}.k+&. MIME-Version: 1.0 Lines: 118 NNTP-Posting-Date: 11 Feb 2014 13:39:46 CET NNTP-Posting-Host: dea472c8.newsspool4.arcor-online.net X-Trace: DXC==TWihoVSKR^PU8j_I0DN6_4IUKUDZm8W4\YJN\YUVHKH;GI^WEEOdb:9C:^]JBNUHXQ4lN\ X-Complaints-To: usenet-abuse@arcor.de Xref: csiph.com comp.lang.javascript:23063 Stefan Ram wrote: [Citation needed] > I am trying to view the properties of a prototype. They say > in JavaScript everything is an object. Dump “them”, then. You should know better than to rely blindly on such unfounded statements. ECMAScript implementations like JavaScript do have primitive data types [1]. > Therefore, I assume that a prototype is an object too. Ex falso quodlibet; however, a (working) prototype must be an object, or null, for other reasons [2]. > I started with typing this into the Firefox Web console: > > 0 . __proto__ . __proto__ __proto__ is a proprietary property. The standards-compliant way to determine the prototype of an object is Object.getPrototypeOf(o). [3] Which would have shown you that there are primitive data types, and that the statement “in JavaScript everything is an object” is provably false: | >> Object.getPrototypeOf(0) | TypeError: 0 is not an object > . It gave me: > > [object Object] > > . I assumed that this was an object (»everything is an > object«), and so I wanted to list all its properties, > but the following loop did not produce any output: > > for( var i in 0 . __proto__ . __proto__ )console.log( i ); Not all properties are enumerable (have the [[Enumerable]] attribute set per ES 5.x, or do not have the [[DontEnum]] attribute set per ES 1 through 3 Final). [6][7][8] A for-in statement iterates only over the enumerable properties of an object *and* over the enumerable properties it inherits from its prototype, in arbitrary order. [9] > . The next attempt, to my surprise, printed the numbers > from 0 to 13: You want to reconsider your learning technique as well. > for( var i in Object.getOwnPropertyNames( 0 . __proto__ . __proto__ )) > console.log( i ); > > 0 > 1 > 2 > 3 > 4 > 5 > 6 > 7 > 8 > 9 > 10 > 11 > 12 > 13 Object.getOwnPropertyNames() returns a reference to an Array instance representing an array of primitive string values, whereas each string value is the name of a property that the object does not inherit from its prototype. [10] The names of the own *enumerable* properties of an Array instance include the array indexes. [11] (However, because implementations may differ and order is not guaranteed with for-in, you SHOULD NOT iterate over an Array in *this* way.) > . What I actually wanted to see was a list of all the > well-known object prototype properties (functions) such as > > hasOwnProperty > isPrototypeOf > propertyIsEnumerable > toLocaleString > toSource > toString > unwatch > valueOf > watch > > . Skip for-in, then. BTW, your peculiar posting style is _not_ appreciated. [12] __________ [1] [2] [3] [6] [7] [8] Ecma Interntional (2000). ECMAScript Language Specification. Edition 3 Final. (retrieved 2002-07-22). [9] [10] [11] [12] -- PointedEars Twitter: @PointedEars2 Please do not Cc: me. / Bitte keine Kopien per E-Mail.