Javascript 如何从构造函数中删除函数?
如何从构造函数中删除函数 如果在Javascript 如何从构造函数中删除函数?,javascript,Javascript,如何从构造函数中删除函数 如果在Person构造函数中有一个名为greet的函数,如何删除该函数 function Person(name) { this.name = name; this.greet = function greet() { alert("Hello, " + this.name + "."); }; } 我希望结果是: function Person(name) { this.name = name; } 或 或
Person
构造函数中有一个名为greet
的函数,如何删除该函数
function Person(name)
{
this.name = name;
this.greet = function greet()
{
alert("Hello, " + this.name + ".");
};
}
我希望结果是:
function Person(name)
{
this.name = name;
}
或
或
delete
是一个您很少看到的关键字,但我向您保证,它是存在的:p您不能更改函数的源代码。如果要更改该函数的行为,必须选择以下选项:
用您自己的函数覆盖该函数。如果函数是独立的,这很容易。然后你就可以定义了
function Person(name)
{
this.name = name;
}
在定义原始函数之后。但是如果涉及到原型和继承,那么获取对原始原型的引用可能会变得很棘手(因为函数声明是如何计算的)
Ceate一个包装函数,该函数创建、实例化并删除您不需要的属性:
function PersonWrapper(name) {
var p = new Person(name);
delete p.greet;
return p;
}
这种方法也是有限的,因为您只能更改从外部可以访问的内容。在您提供的示例中,这就足够了。您的意思肯定是
删除personInstance.greet
,而不是删除Person.greet
(函数没有属性greet
)。如果没有实例,我想从构造函数中删除怎么办?@XP1:如果没有实例,然后,this.greet
不存在,因为构造函数从未执行过。所以在这方面,你的问题没有多大意义。也许你想编辑源代码或者用你自己的函数覆盖Person
,而这个函数不包含这个部分。所以每次我实例化Person
,我都必须删除greet
函数?这就是我试图避免的。@XP1:然后用您自己的函数重写Person
。或者创建一个包装器:函数PersonWrapper(name){var p=newperson(name);删除p.greet;返回p;}
。。。事实上,您无法更改函数的源。函数的可能重复项
delete Person.prototype.greet // if doing prototypes and inheritance
function Person(name)
{
this.name = name;
}
function PersonWrapper(name) {
var p = new Person(name);
delete p.greet;
return p;
}