private void SetPseudoProperties()
        {
            if (_type.GetTypeInfo().ImplementedInterfaces.Contains(typeof(IElement)))
            {
                var focusInEventInstance     = new DomEventInstance(_engine);
                var focusOutEventInstance    = new DomEventInstance(_engine);
                var unloadEventInstance      = new DomEventInstance(_engine);
                var contextMenuEventInstance = new DomEventInstance(_engine);

                FastSetProperty("scrollLeft", new PropertyDescriptor(new JsValue(0.0), false, false, false));
                FastSetProperty("scrollTop", new PropertyDescriptor(new JsValue(0.0), false, false, false));
                FastSetProperty("scrollWidth", new PropertyDescriptor(new JsValue(0.0), false, false, false));
                FastSetProperty("scrollHeight", new PropertyDescriptor(new JsValue(0.0), false, false, false));
                FastSetProperty("clientLeft", new PropertyDescriptor(new JsValue(0.0), false, false, false));
                FastSetProperty("clientTop", new PropertyDescriptor(new JsValue(0.0), false, false, false));
                FastSetProperty("clientWidth", new PropertyDescriptor(new JsValue(0.0), false, false, false));
                FastSetProperty("clientHeight", new PropertyDescriptor(new JsValue(0.0), false, false, false));
                FastSetProperty("offsetLeft", new PropertyDescriptor(new JsValue(0.0), false, false, false));
                FastSetProperty("offsetTop", new PropertyDescriptor(new JsValue(0.0), false, false, false));
                FastSetProperty("offsetWidth", new PropertyDescriptor(new JsValue(0.0), false, false, false));
                FastSetProperty("offsetHeight", new PropertyDescriptor(new JsValue(0.0), false, false, false));

                FastSetProperty("focusin", new PropertyDescriptor(focusInEventInstance.Getter, focusInEventInstance.Setter, false, false));
                FastSetProperty("focusout", new PropertyDescriptor(focusOutEventInstance.Getter, focusOutEventInstance.Setter, false, false));
                FastSetProperty("unload", new PropertyDescriptor(unloadEventInstance.Getter, unloadEventInstance.Setter, false, false));
                FastSetProperty("contextmenu", new PropertyDescriptor(contextMenuEventInstance.Getter, contextMenuEventInstance.Setter, false, false));
            }
        }
        private void SetEvents(IEnumerable <EventInfo> eventInfos)
        {
            foreach (var eventInfo in eventInfos)
            {
                var names = eventInfo.GetCustomAttributes <DomNameAttribute>();

                foreach (var name in names.Select(m => m.OfficialName))
                {
                    var eventInstance = new DomEventInstance(_engine, eventInfo);
                    FastSetProperty(name, new PropertyDescriptor(eventInstance.Getter, eventInstance.Setter, false, false));
                }
            }
        }
        void SetEvents(EventInfo[] eventInfos)
        {
            foreach (var eventInfo in eventInfos)
            {
                var names = eventInfo.GetCustomAttributes<DomNameAttribute>();

                foreach (var name in names.Select(m => m.OfficialName))
                {
                    var eventInstance = new DomEventInstance(this, eventInfo);
                    FastSetProperty(name, new PropertyDescriptor(eventInstance.Getter, eventInstance.Setter, false, false));
                }
            }
        }