I’ve been learning more about javascript’s prototypal inheritance. I know there is a somewhat fierce debate on whether to extend native objects and I’d like to side step that whole debate entirely in this question.
Is it possible to extend only descendent object in javascript?
To extend all objects I can do this:
Object.prototype.size = function(){
var length = 0;
for(var i in this){
if(this.hasOwnProperty(i)){
length++;
}
}
return this;
}
But the problem is that It extends all objects. What I’d like to do is have this:
var MyNameSpace = function(){
};
MyNameSpace.Object.prototype.size = function(){
var length = 0;
for(var i in this){
if(this.hasOwnProperty(i)){
length++;
}
}
return this;
}
That way I would only be extending the native objects in the scope of my global object.
any suggestions would be great thanks
Update:
In response to a few comments I’m adding more code to clarify what I’m trying to do.
I think i may have not phrased my question correctly, or maybe my thinking is incorrect, but what i’d like to be able to do is this:
var my = new MyNameSpace();
var my.name = {firstName : 'Hello', lastName : 'World'};
var nameCount = my.name.size(); // 2
the code you provided will allow me to get the size of each MyNameSpace object I create, but not the object literals that are properties of the MyNameSpace object
You could use “pseudo-classical” inheritance style to achieve it:
What you define on a function object’s
prototypewould be inherited by all the function objects created vianewoperator.Updated code, according to your added requirements,