为了账号安全,请及时绑定邮箱和手机立即绑定

nodejs通过函数名进行静态方法调用出现类型错误,为什么?

nodejs通过函数名进行静态方法调用出现类型错误,为什么?

PHP
拉丁的传说 2019-02-06 17:07:58
nodejs通过函数名进行静态方法调用出现类型错误,为什么? 
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

在JS里,一切都是对象,所谓的class并不是传统语言上的定义或者声明,而是直接创建出来了(已分配内存)。
Myfunc是个构造函数(constructor),所有在构造函数中创建的变量和方法都是prototype的。
因此
function Myfunc(){
this.myMethod=function(){
}
}

function Myfunc(){
}
Myfunc.prototype.myMethod=function(){
}
是等效的。
所以调用前必须new一下。
而下面这段是可以的,因为直接给Myfunc对象加了一个方法myMethod。恩只是写法和用法像静态而已。
function Myfunc(){
}
Myfunc.myMethod=function(){
}



查看完整回答
反对 回复 2019-03-19
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

Myfunc默认只是一个函数,因此函数默认并没有myMethod这个成员方法。即便你函数内部定义了一个myMethod也是没用的,原因是:

  1. Myfunc并没有运行过,因此内部没有执行的代码对外部是不会产生任何影响的。

  2. this指向不明,即便你运行了Myfunc,但是this指向那个对象是动态判断的。

至于下面你使用了new就可以用实例对象调用myMethod方法。那是因为当一个函数通过new关键字调用时,这个函数就不再是一个普通的函数,而是变成了一个对象模板函数(即构造函数),此时函数内部的this指向的是new出来的对象,此时调用myMethod就显得顺理成章了。


查看完整回答
反对 回复 2019-03-19
  • 2 回答
  • 0 关注
  • 1151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信