3.2.0

Object.prototype bug?

If I override the prototype object with any other methods, the ActiveWidgets grid component always shows the first row of data as 'undefined'? A bug or am I implementing something incorrectly?
WB - Orlando
February 23,
Can you please provide an example, which prototype object you modify?
Alex (ActiveWidgets)
February 23,
I use an object deep cloning function within my applications which is attached to the object.prototype function like below... If you include this anywhere in the page scope of the grid, the first row shows up as an undefined but does not seem to interfere with the mechanics of the grid at all...

Object.prototype.clone = function(){
if(typeof(this) != "object"){
return this;
}
var cloneDepth = ((arguments.length >= 1)?((isNaN(parseInt(arguments[0])))?(null):parseInt(arguments[0])):null);
if (cloneDepth){
cloneDepth=((cloneDepth <= 0)?(null):(cloneDepth));
}
var cloneObject = null;
var thisConstructor = this.constructor;
var thisConstructorPrototype = thisConstructor.prototype;
if (thisConstructor == Array){
cloneObject = new Array();
} else if(thisConstructor == Object){
cloneObject = new Object();
} else {
try{
cloneObject = new thisConstructor;
} catch(exception) {
cloneObject = new Object();
cloneObject.constructor = thisConstructor;
cloneObject.prototype = thisConstructorPrototype;
}
}
var propertyName = "";
var newObject=null;
for (propertyName in this){
newObject = this[propertyName];
if (!thisConstructorPrototype[propertyName]){
if (typeof(newObject)=="object"){
if (newObject === null){
cloneObject[propertyName] = null;
} else {
if(cloneDepth){
if(cloneDepth == 1){
cloneObject[propertyName] = null;
} else {
cloneObject[propertyName] = newObject.clone(--cloneDepth);
}
} else {
cloneObject[propertyName] = newObject.clone();
}
}
} else {
cloneObject[propertyName] = newObject;
}
}
}
return cloneObject;
};
WB - Orlando
February 24,
Sorry, I cannot replicate this - if I just add this code to any of the examples (/examples/grid/...) everything is OK. So I suspect it might be something else. ???
Alex (ActiveWidgets)
February 24,
It is not a good idea top add properties to Object's prototype. When you do, the new property is going to become an enumerable property of all objects (since everything inherits from object).

The consequence is that when you do a for in loop, the clone method that you added to the prototype will always be one of the enumerated properties.

I am pretty sure this is what is causing the error, even though I didn't even look at ActiveWidgets' code.

Workaround? Instead of extending Object (which I wish I could do), just create helper methods. Mine is called JSUtil.cloneObject( objToClone ).
Juan Mendes (<PUT_FIRST_NAME_HERE>itophp@yahoo.com
April 6,

This topic is archived.

See also:


Back to support forum