我有一个Notify
类,例如:
class Notify {
success(text) {
// TODO
}
error(text) {
// Todo
}
}
export default new Notify();
使用时,我直接调用此类中的方法,例如Notify.success()
,因此,现在我想尝试一种新的调用方法,例如Notify('my title', 'success')
。在PHP中,我知道它是__invoke
方法,但是在JS中,我不知道该如何使用。我可以在class
中这样做吗?或者我必须使用“正常”功能。
请帮助我。谢谢。
答案 0 :(得分:2)
JavaScript中没有__invoke
的类似物。您可以创建一个函数,然后将属性附加到is,以便它也可以用作对象。
function notifyConstructor() {
// Make the function
const notify = (text, type) => {
switch (type) {
case 'success': return notify.success(text);
case 'error': return notify.error(text);
default: throw TypeError(`Unknown type "${type}"`);
}
};
// Attach public properties and methods to the function
notify.success = text => {
// TODO
};
notify.error = text => {
// Todo
};
return notify;
}
const notify = notifyConstructor(); // Make a Notify instance
notify('my title', 'success'); // Call the instance
notify.success('my title'); // Call an instance method
答案 1 :(得分:1)
您可以使用上下文this
来获取函数,如下所示。
如果您自己调用函数invoke
(堆栈溢出错误),请小心。
class Notify {
constructor() {
}
invoke(msg, fn) {
if (this[fn]) {
this[fn](msg);
} else throw new Error("Illegal argument Error.");
}
success(text) {
console.log('Success:', text);
}
error(text) {
console.log('Error:', text);
}
}
let notify = new Notify();
notify.invoke('my title', 'success');
notify.invoke('my title', 'error');
notify.invoke('my title', 'ele');
或者直接在实例化对象上方:
class Notify {
constructor() {
}
success(text) {
console.log('Success:', text);
}
error(text) {
console.log('Error:', text);
}
}
let notify = new Notify();
notify['success']('my title');
notify['error']('my title');
答案 2 :(得分:1)
在javascript对象属性中,使用点(.
)的访问是使用数组表示法([]
)访问属性的简写表示法。但是,简写表示法确实要求属性名称符合用于标识符的语法。
假设Notify
是导入实例的名称,
Notify["success"]("my title"]
等同于
Notify.success( "my title")