在JavaScript中使用构造函数创建类时,以后是否可以重新定义类的方法?
例:
function Person(name)
{
this.name = name;
this.sayHello = function() {
alert('Hello, ' + this.name);
};
};
var p = new Person("Bob");
p.sayHello(); // Hello, Bob
现在,我想像这样重新定义sayHello
:
// This doesn't work (creates a static method)
Person.sayHello() = function() {
alert('Hola, ' + this.name);
};
因此,当我创建另一个时Person
,新sayHello
方法将被称为:
var p2 = new Person("Sue");
p2.sayHello(); // Hola, Sue
p.sayHello(); // Hello, Bob
编辑:
我意识到我可以输入“ Hello”或“Hola”之类的参数sayHello
来完成不同的输出。我还意识到我可以像这样简单地为p2分配一个新函数:
p2.sayHello = function() { alert('Hola, ' + this.name); };
我只是想知道是否可以重新定义类的方法,以便的新实例Person
将使用新sayHello
方法。
以后可以重新定义类的方法吗?
是。但是,您不得将新功能分配给Person
构造函数的属性,而应分配给实例本身:
var p2 = new Person("Sue");
p2.sayHello(); // Hello, Sue
p2.sayHello = function() {
alert('Hola, ' + this.name);
};
p2.sayHello(); // Hola, Sue
如果要对所有新实例自动执行此操作(并且尚未使用该方法的原型,可以轻松地像@dystroy的答案中那样进行交换),则需要装饰构造函数:
Person = (function (original) {
function Person() {
original.apply(this, arguments); // apply constructor
this.sayHello = function() { // overwrite method
alert('Hola, ' + this.name);
};
}
Person.prototype = original.prototype; // reset prototype
Person.prototype.constructor = Person; // fix constructor property
return Person;
})(Person);
来自以下来源: https://www.amazon.com/java-complete-reference-herbert-schildt/dp/0071808558 第8章:在继承中使用final 对于私有、静态、最终方法,应该使用早期(静态)方法绑定 所以正如我所认为的,这两个方法应该有不同的绑定类型。检查字节码: 在这里我看到了两个有害的指示。那么有什么方法可以确定类字节码使用了哪种绑定呢
问题内容: 有没有不用典型继承就可以重新定义类或其某些方法的方法?例如: 我该怎么做才能代替?显然这是我想做的 这是我的两难选择:我更新了破坏我的代码的第三方库。我不想直接修改该库,因为将来的更新可能会再次破坏代码。我正在寻找一种无缝的方法来替换类方法。 我发现这个库说可以做到,但是我很警惕,因为它已经有4年的历史了。 编辑: 我应该澄清的是,由于框架的限制,我不能将类从重命名为to 或其他任何名
问题内容: 我有一些需要经常打印的结构。现在,我正在围绕该结构使用经典的打印包装器: 此功能很方便,但实际上也很有限。如果不进行新包装,则无法添加或添加一些文本。我知道我可以使用 va_arg 系列添加或添加一些文本,但是我觉得我会重新实现。 我想知道是否有可能向printf编写自定义函数。我希望能够写这样的东西: 这可能吗 ?我怎样才能做到这一点 ? 注意:我在Ubuntu Linux 10.0
我想知道是否有类似于对象实例的函数创建的东西,也许有类似的东西? 这段代码是写的,例如,它也不工作
问题内容: Python 3.4引入了一个新模块,该模块向该语言添加了枚举类型。的文档提供了一个示例来演示如何扩展它: 此示例还演示了一个问题:在property方法中,定义了一个常量,该常量通常在类级别定义- 但是尝试在a级别内执行此操作只会将其添加为枚举的成员之一,因此,在方法内部定义。 如果该类想在其他方法中使用此常量,则也必须在其中定义它,这显然不是理想的选择。 有什么方法可以在中定义类常
我想重新设置GlobalKTable的键(可能是在初始化它时,因为我相信它们只在创建之后才被读取)。 这可能吗? 我在一个Spring/JavaKafka Streams应用程序中有两个主题。第一个是不压缩的,第二个是。两者都使用Avro作为它们的键和值。 应用程序从第一个(非压缩)主题流式传输记录,并通过从压缩主题附加附加数据。压缩的主题已作为GlobalKTable引入应用程序,通过创建,并且