说,我有一个名为Animal
的构造函数,它有两个原型方法foo
和bar
。
我创建了一个新对象:
const animal = new Animal()
我可以打电话给
animal.foo()
或
animal.bar()
我可以用另一种方法(baz
替换这两种方法吗?
赞:
animal.baz()
因此,根据上下文,我想将foo
或bar
分配给baz
。
答案 0 :(得分:1)
面向对象的方法是创建两个子类,每个子类一个。在每种方法中,您都需要定义baz
方法,以分别将其参数分别传递给this.foo
或this.bar
。
您还可以使用baz
在对象上动态定义animal.baz = Animal.<foo|bar>
。但是,该策略的可维护性较低(每次实例化对象时都必须定义该策略),而性能较低(解释器针对具有不变属性的对象进行了优化)。
答案 1 :(得分:0)
不知道上下文的形式,您可以通过一种简单的方法将上下文(以任何形式)传递到构造函数中,并将其存储在对象中,然后调用baz
时,检查存储的上下文并采取相应措施。这也很灵活:
// ES6
class Animal {
constructor(context) {
this.context = context;
}
foo() {
...
}
bar() {
...
}
baz() {
if(context == "some string id maybe?") {
return this.foo();
} else if(context == 13523) { // some integer id
return this.foo();
} else if(context === someContextObject) { // some context object
return this.bar();
} else {
return this.foo();
}
}
}
//Vanilla
const Animal = function(context) {
this.context = context;
}
Animal.prototype.foo = function() {
...
}
Animal.prototype.bar = function() {
...
}
Animal.prototype.baz = function() {
if(context == "some string id maybe?") {
return this.foo();
} else if(context == 13523) { // some integer id
return this.foo();
} else if(context === someContextObject) { // some context object
return this.bar();
} else {
return this.foo();
}
}
答案 2 :(得分:0)
像这样? :D
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World";
return 0;
}