如何从构造函数中删除函数?
如果构造函数中调用greet了Person函数,如何删除该函数?
function Person(name)
{
this.name = name;
this.greet = function greet()
{
alert("Hello, " + this.name + ".");
};
}
我希望结果是:
function Person(name)
{
this.name = name;
}
如何从构造函数中删除函数?
如果构造函数中调用greet了Person函数,如何删除该函数?
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;
}
在定义了原始函数之后。但是,如果涉及原型和继承,获取对原始原型的引用可能会变得很棘手(因为函数声明的评估方式)。
创建一个包装函数,它创建和实例化并删除您不想要的属性:
function PersonWrapper(name) {
var p = new Person(name);
delete p.greet;
return p;
}
这种方法也受到限制,因为您只能更改从外部可访问的内容。在您提供的示例中,这已经足够了。