function myFunc(){
this.name="func";
console.log(this);
}
function myFunc2(){
console.log(this.name);
}
myFunc();
myFunc2();
new myFunc();
new myFunc2();
console.log(this)
在node.js执行上述代码,第一次执行两个函数this
指向的是全局,第二次用了new
构造器后指向的是实例化的对象本身,但是最后一个外部的console.log()
中为什么this
输出的却是空的对象({}
)呢?
看帖子还没关,我来总结下,如果问题已经解决,希望早点关帖
1. 直接调用的 this
这两个调用属于直接调用,在非严格模式下,直接调用函数,函数中的
this
指向全局对象。在 NodeJS 环境下,全局对象是global
,所以2. 构造函数中的 this
new myFunc()
这种调用是把myFunc
当作构造函数使用。这时候,函数中的this
指向新创建的对象。如果构建函数没有通过return
语句返回特定的值,构建函数通过new
调用返回上述新创建的对象。3. console.log(this) 为什么不是 global
NodeJS 的每一个文件是被当作一个模块来封装的,所以,你直接写在文件中的代码,实际可能是被封装成这样的
也就是说,
console.log(this)
中的this
是指向外部的module
而不是global
。好,现在你要问,那为啥打印出来没有
factory
——因为这个 module 是我假设的,实际 NodeJS 如何调用需要去看它的实现相关的资料或者源码,也许它是这样调的呢