Programmatically List All Properties Of Object From C++ Code?
May 8, 2010
I want to programmatically list all properties of JS object from C++ code (I am using Mozilla's JSAPI). I know I can go up the prototype chain with JS_GetPrototype, then enumerate each object's own properties with JS_Enumerate.
How does one trigger the execution of a method within an object or any other code/function with the setting of an object property?
More elaboration for those who want it:
Suppose we have anObjectType, with a property .description, whose value can be a string, and the value of .description actually describes the structure of anObjectType as a string. (The details are not important about how the structure is described, but if you want something concrete, think of 'anObjectType' as a DOM Node of type NODE_ELEMENT, and ..description as the property .innerHTML.)
When an instance of anObjectType is created, the value of description is created with the instance. Indeed, the value of description may not be set with the construction of anObjectType, but it might be added to the prototype of anObjectType.
But the property .description is not merely read-only. Fetching the value of .description returns the string which describes the structure of the object in a meaningful way.
When .description is set with a value of type string, the string is checked to see if it properly describes a legally formed structured for anObjectType, and the instance (and only that instance) of anObjectType is completely re-built: it might possibly be destructed and then re- constructed, or all properties (but not methods) which involve descendant objects are changed to conform to the described structure.
The question is, the setting of a string value of the property ..description of object anObjectType does not automatically trigger a method/methods (or an exception??) for doing something (such as restructing the object) as a result of the setting of an object property.
how to add extra properties to html elements as I was storing data in html attributes. After looking at some others code including Raphael and this addEvent code. [URL] They seem to treat objects just like an array. obj[property] = value; This would have been extremely helpful to know previously as I have needed to be able to include variables in property names - but have resorted to making the whole thing a string and calling exec() on it.
I need to obtain a list of supported events on an encountered browser version programmatically, ie, via script. Since Explorer exposes its events on document object I can do something as simple as this:
;for(x in document)if(/^on/.test(x))alert(x);
(!warning: long list ahead..., you can use the console.log(x) instead) ..and simply store them on some appropriate object for latter use in my program flow.
Is there a sort of hack or "a hidden corner" or whatever, that would enable us to build a list of events available on Firefox in a similar fashion?
i'd like to know objects properties and/or methods.
saying i do have an object "o" being part of the dom (a div or an ul...) how could i list (introspection) all the properties and methods attached to this object ?
i know it is possible in javascript but don't remeber how to ...
Do many programmers remember most of the object properties and methods or do they use IDE or references to find those specific objects. I'm starting to learn Javascript and seeing all the different type of objects available can be depressing. :(
I am fairly familiar with the concept of Objects and their properties and methods, but javascript being object based as opposed to object oriented has me stumped on how to access an object's properties from an onclick event handler created for another object created within the original object.
In the example below, I have a constructor function called anyObj. to which I pass an object reference to an element.
anyObj has 3 properties and one function increaseWidth()
increaseWidth() creates a new button with an onclick event handler and this is where I have a problem.
The onclick function needs to increase the value of anyObj's this.width property. I originally had a line this.width += 10; in the onclick but quickly realised why this wasn't working because the this in the onclick function refers to the new button object and not the this.width property of anyObj.
The workaround I have used, and it works, is to make a copy of all the this.xxxxx properties. eg. width = this.width; and use the width variable in the onclick as you can see below. This "workaround" works fine but doesn't feel ideal to me.
So is there a better way to access the anyObj()'s properties from within the onclick function than the way I have done it? Obviously I would prefer to not have to make copies of all the anyObj() properties like I have to make them accessible to the onclick function.
Say x in a XML Http Request Object ... meaning it's either XMLHttpRequest (firefox) or ActiveXObject (IE)
This line of code works in firefox... x.someProp = "someValue"; alert(x.someProp);
But in IE I get "Object doesn't support this property or method" I need to place a custom property on the object. Is there any way I can do that in IE?
I've created an object and within this object, I've added an eventlistener. But the problem now is that after addEventListener is being called to access a callback function, the callback function is not able to access the properties within its own class. Code:
I am fairly familiar with the concept of Objects and their properties and methods, but javascript being object based as opposed to object oriented has me stumped on how to access an object's properties from an onclick event handler created for another object created within the original object.In the example below, I have a constructor function called anyObj. to which I pass an object reference to an element.
anyObj has 3 properties and one function increaseWidth()
increaseWidth() creates a new button with an onclick event handler and this is where I have a problem.The onclick function needs to increase the value of anyObj's this.width property. I originally had a line this.width += 10; in the onclick but quickly realised why this wasn't working because the this in the onclick function refers to the new button object and not the this.width property of anyObj.
The workaround I have used, and it works, is to make a copy of all the this.xxxxx properties. eg. width = this.width; and use the width variable in the onclick as you can see below. This "workaround" works fine but doesn't feel ideal to me.So, what I am asking advice on is, is there a better way to access the anyObj()'s properties from within the onclick function than the way I have done it? Obviously I would prefer to not have to make copies of all the anyObj() properties like I have to make them accessible to the onclick function.
Code:
function anyObj(divObj){ this.elem = divObj; this.width = 50;
Well, I've been working with JS for three years and have a great experience here. But! I still have no really acceptable answer to the following question:
What is the principle difference between declaring methods/properties in the constructor function body and via prototypes.
Are there any real GURUs? Let's discuss the issue.
In JavaScript 1.5, objects can use special getter and setter functions [1] for properties. However, these only seem to be implemented in Gecko and, AFAICT, don't seem to be part of ECMAScript.
Is there an alternative syntax I can use that is standardised in ECMAScript and also (preferably) interoperably implemented in several browsers? Or, do I have to use ordinary getFoo() and setFoo() functions. Code:
I have an object: Myobject and properties for the object: Myobject.color, Myobject.width, Myobject.height The scripts returns TRUE if I query Myobject.color or Myobject.width etc. I want to loop through de properties like so:
Code: var properties = ['color', 'width', 'height'] for (var i=0; i<properties.length; i++) { Myobject.properties[i]; // Returns UNDEFINED }
I've got an image gallery in which users can navigate between the next and previous image by clicking on the right or left half respectively of the current image. When the mouse is over the left half an arrow pointing to the left is shown on the image and when on the right an arrow to the right. It works fine if i use inline javascript but i'm trying to achieve the same effect unobtrusively and with an addEvent function. The onmouseover part works fine but from the function that fires on the onmouseout event i get the following error in Firefox and the arrow is not hidden:
I don't know why but after the animate() function it's like all the properties get wiped. PHP Code: bubble.prototype.expand = function() { var _this = this; this.mLeft = parseInt($(this.div).css('margin-left').split('px')[0]); this.mTop = parseInt($(this.div).css('margin-top').split('px')[0]); this.iWidth = $(this.iconImg).width();//icons dimensions this.iHeight = $(this.iconImg).height(); .....
This object was passed to my click event handler. Why are so many properties missing? The click event came from an <a> in a <li>, propagated down to the <ul> on which the handler was set.
If I click on the <ul>, the event object looks "normal".
if I'm using IE only I can get around just fine, but I haven't really had a lot of experience sniffing out other browsers and trying to create different code branches to create the same effect on a particular browser.
In this case I've got a series of layers that correspond to some links. When someone mouses over the link, the layer becomes visible. When someone mouses out, I want the layer to fade out. Code:
I've got a javascript object is "is" that has dynamically populated properties. I make an ajax call to my database to grab usernames associated with unique ID's and populate the javascript. I can call a property directly like this: aler (is.softUser1) or alert(is.softUser2) and show the corresponding values. However since what is being returned from the database is dynamic I may need to call is.softUser5 or is.softUser8 so I need to do that call dynamically. code...
and that obviously doesn't work.
Is there a way that I can dynamically call that property based on whatever value "user" is?
I have an object on the document element that allows for other components to register with it, i have a custom event something along$(document).bind("register",function(thechild)..So in the child object when they are created i call$(document).trigger("register",this);And indeed i get the DOM object. However i'm looking for the plug in object, i want to be able to call methods on the passed childobject and access it's Config.Does that make sense? How can i write a plug in that is applied to various objects that also registers itself with an 'overseer' object on the document element in such a way that i can allow that overseer object to call methods on any registered child objects?