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

How to delete a function from constructor?

本文关键字:删除 函数 构造函数      更新时间:2023-09-26

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

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

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

我希望结果是:

function Person(name)
{
    this.name = name;
}
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

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

用自己的函数覆盖该函数。如果函数是独立的,这很容易。然后你真的可以定义

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

定义原始函数之后。但是,如果涉及原型和继承,则获取对原始原型的引用可能会变得棘手(因为函数声明的计算方式)。

Ceate 一个包装函数,该函数创建、实例化并删除您不需要的属性:

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

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