如何从构造函数中删除函数?

时间:2012-05-14 20:38:13

标签: javascript

如何从构造函数中删除函数?

如果greet构造函数中有一个名为Person的函数,我该如何删除该函数?

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

我希望结果是:

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

2 个答案:

答案 0 :(得分:5)

delete this.greet

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

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

delete是您很少看到的关键字,但我保证,它存在:P

答案 1 :(得分:3)

您无法更改功能的来源。如果要更改该函数的行为,则必须选择:

用您自己的功能覆盖该功能。如果该功能是独立的,这很容易。那么你真的可以定义

function Person(name)
{
    this.name = name;
}
在之后

定义了原始函数。但是如果涉及到原型和继承,那么获取对原始原型的引用会很棘手(因为评估函数声明的方式)。

Ceate一个包装函数,它创建并实例化并删除你不想要的属性:

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

这种方法也很有限,因为您只能更改外部可访问的内容。在你提供的例子中,它就足够了。