XP1
XP1

Reputation: 7193

How to delete a function from constructor?

How to delete a function from constructor?

If there is a function called greet in the Person constructor, how do I remove the function?

function Person(name)
{
    this.name = name;
    this.greet = function greet()
    {
        alert("Hello, " + this.name + ".");
    };
}

I want the result to be:

function Person(name)
{
    this.name = name;
}

Upvotes: 6

Views: 2521

Answers (2)

Felix Kling
Felix Kling

Reputation: 816960

You cannot change the source of a function. If you want to change that function's behaviour, you have to options:

Override the function with your own. This is easy if the function is standalone. Then you can really just define

function Person(name)
{
    this.name = name;
}

after the original function was defined. But if prototypes and inheritance are involved, it can get tricky to get a reference to the original prototype (because of the way how function declarations are evaluated).

Ceate a wrapper function which creates and instance and removes the properties you don't want:

function PersonWrapper(name) { 
    var p = new Person(name); 
    delete p.greet; 
    return p;
}

This approach is also limited since you can only change what is accessible from the outside. In the example you provided it would be sufficient though.

Upvotes: 3

Halcyon
Halcyon

Reputation: 57703

delete this.greet

or

var personInstance = new Person();
delete personInstance.greet // to remove it from the instance from the outside

or

delete Person.prototype.greet // if doing prototypes and inheritance

delete is a keyword that your very rarely see but I assure you, it exists :P

Upvotes: 6

Related Questions