如何从构造函数中删除函数?
如果greet
构造函数中有一个名为Person
的函数,我该如何删除该函数?
function Person(name)
{
this.name = name;
this.greet = function greet()
{
alert("Hello, " + this.name + ".");
};
}
我希望结果是:
function Person(name)
{
this.name = name;
}
答案 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;
}
这种方法也很有限,因为您只能更改外部可访问的内容。在你提供的例子中,它就足够了。