如何解决JavaScript中函数类的默认处理程序
我想知道是否可以让函数类具有默认的调用方法。让我详细说明。
function Foo(){
/*some logic*/
Foo.prototype.aletUser = function alertUser(message) {
alert(message);
}
}
假设上面的代码是我的函数类(如果我对以上结构的命名错误,请告诉我),然后实例化此结构之一。
let param = new Foo();
现在,我希望调用以下内容,并希望它可以调用我的原型Foo.alertUser
param('Hey There')
如何实现?预先感谢。
我的方法背后的更多见识
我正在使用React Native,我希望param('Hey There')
在函数内部使用一个钩子,但是我没有主意,我知道如何使其与JavaScript类一起使用,但是不幸的是,不能调用钩子内部类组件。
解决方法
回答您实际提出的问题,这是可能的,但可能不是一个好主意。一种实现方法是让new Foo
创建一个函数,然后更改其原型(通常不是一个好主意),如下所示:
function Foo() {
// Create a function,the change its prototype to
// `Foo.prototype` and return it
const retval = function alertUser(param) {
console.log(param);
};
Object.setPrototypeOf(retval,Foo.prototype);
return retval;
}
// Make `Foo.prototype` use `Function.prototype` as its prototype
Foo.prototype = Object.create(Function.prototype);
Foo.prototype.constructor = Foo;
const param = new Foo();
param("Hi there");
但是,出于以下几个原因,这可能不是一个好主意:
-
更改对象的原型可以取消JavaScript引擎对其的实现的优化。现在,对于您使用它的目的可能并不重要,它取决于它的关键路径(以及去优化的程度很明显),因此这当然是一个选择。
-
您已经说过要这样做,以便可以在类组件中使用钩子。正如我在a comment中所说的那样,这可能行不通,即使可行,这也不是您最好的解决方案
我会退一步说,如果您发现自己想从类组件中调用钩子,那么最好的选择是:
-
构建与该钩子等效的基于类的功能,并且不要使用该钩子,或者
-
将类组件更改为功能组件,以便可以正常使用钩子
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。