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输出的却是空的对象({})呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
看帖子还没关,我来总结下,如果问题已经解决,希望早点关帖
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 如何调用需要去看它的实现相关的资料或者源码,也许它是这样调的呢顶级作用域this指向全局对象