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

在node.js环境下下面这段代码:functionMyfunc(){varmyvar="somevalue";this.myMethod=function(){retu... 在node.js环境下
下面这段代码:
function Myfunc(){
var myvar="somevalue";
this.myMethod=function(){
return myvar;
}
}

//下面这一句报错 TypeError:Myfunc.myMethod is not a function
Myfunc.myMethod();

//这样是没问题的

var myfunc=new Myfunc();

myfunc.myMethod();

但是我需要使用Myfunc.myMethod(); 的形式实现静态调用,不要new的实例。请问问题出在哪里啦???
展开
 我来答
育知同创教育
2018-07-27 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
在JS里,一切都是对象,所谓的class并不是传统语言上的定义或者声明,而是直接创建出来了(已分配内存)。
Myfunc是个构造函数(constructor),所有在构造函数中创建的变量和方法都是prototype的。
因此
function Myfunc(){
this.myMethod=function(){
}
}

function Myfunc(){
}
Myfunc.prototype.myMethod=function(){
}
是等效的。
所以调用前必须new一下。
而下面这段是可以的,因为直接给Myfunc对象加了一个方法myMethod。恩只是写法和用法像静态而已。
function Myfunc(){
}
Myfunc.myMethod=function(){
}
cainiaokan
2017-05-08 · TA获得超过2917个赞
知道小有建树答主
回答量:651
采纳率:66%
帮助的人:611万
展开全部

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

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

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

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

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式