mirror of
				https://github.com/flynx/Course-JavaScript.git
				synced 2025-10-31 03:50:10 +00:00 
			
		
		
		
	fixed a big error...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									351ec981c7
								
							
						
					
					
						commit
						1393c03f5b
					
				
							
								
								
									
										58
									
								
								js-oop.js
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								js-oop.js
									
									
									
									
									
								
							| @ -281,61 +281,11 @@ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // "Double" inheritance
 | ||||
| // --------------------
 | ||||
| // Inheritance chains
 | ||||
| // ------------------
 | ||||
| //
 | ||||
| // There are actually three sources where JavaScript looks for attributes:
 | ||||
| // 	1) own attributes (local object) 
 | ||||
| // 	2) .__proto__ 
 | ||||
| // 		as coverd in the first section
 | ||||
| // 	3) .constructor.prototype 
 | ||||
| // 		as explained in the previous section
 | ||||
| //
 | ||||
| // Though in the general case both .__proto__ and .constructor.prototype 
 | ||||
| // point to the same object and are redundant, the two are independent 
 | ||||
| // and can be used in parallel, thus the title.
 | ||||
| //
 | ||||
| // Here is a basic inheritance structure (tree) with .__proto__ and 
 | ||||
| // .constructor.prototype split to separate objects:
 | ||||
| //
 | ||||
| // 	O   A
 | ||||
| // 	 \ /
 | ||||
| // 	  a
 | ||||
| //
 | ||||
| 
 | ||||
| 	var O = {  | ||||
| 		o: 0, | ||||
| 	} | ||||
| 
 | ||||
| 	function A(){ | ||||
| 		//...
 | ||||
| 	} | ||||
| 	A.prototype.a = 1 | ||||
| 
 | ||||
| 	var a = new A() | ||||
| 	a.__proto__ = o | ||||
| 
 | ||||
| // Now we can access both attributes inherited from 'O' and 'A'...
 | ||||
| 
 | ||||
| 	a.o					// -> 0
 | ||||
| 	a.a					// -> 1
 | ||||
| 
 | ||||
| 
 | ||||
| // The check is done specifically in this order, thus attributes can 
 | ||||
| // "shadow" other attributes defined by the other mechanism.
 | ||||
| //
 | ||||
| // To show this let us define an attribute with the same name on both 
 | ||||
| // 'O' and 'A':
 | ||||
| 
 | ||||
| 	O.x = 'came from O' | ||||
| 	A.prototype.x = 'came from A' | ||||
| 
 | ||||
| 	a.x					// -> 'came from O'
 | ||||
| 
 | ||||
| 
 | ||||
| // In both inheritance mechanisms, each step is checked via the same 
 | ||||
| // rules recursively, this enables inheritance chains and less 
 | ||||
| // conveniently inheritance trees (superposition of chains).
 | ||||
| // rules recursively, this makes it possible to build inheritance chains
 | ||||
| //
 | ||||
| // We will create a chain:
 | ||||
| //
 | ||||
| @ -430,7 +380,7 @@ | ||||
| 				// NOTE: the last in this chain is Object.prototype.__proto__ 
 | ||||
| 				// 		and it is null
 | ||||
| 				: obj.__proto__ == null ? false | ||||
| 				// go down the chian...
 | ||||
| 				// go down the chain...
 | ||||
| 				: isInstanceOf(obj.__proto__, proto)) | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user