. Point, toString = function() { 10 return (this.x + " x " + this.y)

. Pour-obtenir-un-chaînage-de-prototypes, un autre type U, la seule possibilité en ?ava?cript est que le prototype de l'objet stocké dans le champ prototype de T soit une instance de U. C'est assez problématique car cela implique d'appeler le constructeur de U lors de l'héritage, ce qui n'est pas toujours une bonne idée si par exemple celui-ci eeectue des eeets de bord. Pour cela, beaucoup de bibliothèques eeectuent une copie de prototypes plutôt qu'un chaînage (c'est en particulier ce que nous faisons dans notre implantation de l'interface entre les modèles objets)

. Wr, 55 let unweaken dom = 56 List.fold_left 57 (fun r w -> 58 match Weak.get w 0 with 59 | None -> r 60 | Some v -> v :: r) 61 [] !dom 62 63 (* trouve le parent d'un noeud *) 64 let find_parent dom n = 65 let rec find l = 66 List.fold_left 67 (fun r p -> 68 match p with 69 | Black (_, _, links) -> 70 if List.exists 71 ((==) n) !links then 72 Some p 73 else 74 (match find !links, r with 75 | (Some _ as r, None 76 | NoneSome _ as r') -> r' 77 | None, None -> None 78 | _ -> assert false) 79 | White _ -> assert false) 80 None l, pp.53-54

C. ?mplantations-de-f and D. , * teste si a est un ancêtre de n *) 84 let ancestor dom a n = 85 let rec check n = 86 let p = find_parent dom n in 87 match p with 88 | None -> false 89 | Some p when p = a -> true 90 | Some p -> check p 91 in 92 a != n && check n 93 94, pp.82-83