<script> function test() { this.x = 10; } var obj = new test(); </script>
我在其中一个博客上读到,当我们使用新关键字时,将创建一个proto对象,并将“this”设置为proto对象.
所以,当我只调用var obj = test(); ,将“this”设置为proto对象还是在这种情况下根本不会创建proto对象?
那么,程序员在两种调用方法之间的基本区别是什么呢?
I read in on one of the blogs that when we use a new keyword , a proto object would be created and “this” would be set to proto object.
如果这就是它所说的,那就错了.
如果在调用函数时使用new运算符,则函数的this参数将设置为一个新的Object,就像新的Object()一样.该对象将其[[Prototype]]设置为构造函数的公共原型对象.
如果return语句没有返回其他对象,它还会导致函数返回此新对象(以及构造函数的实例),因此:
function test() { this.x = 10; } var obj = new test();
使用值为10的public x属性和引用test.prototype的internal [[Prototoype]]属性创建一个新对象.将对此新对象的引用分配给obj.
So, when I just call var obj = test(); , will the “this” be set to proto object or will the proto object not created at all in this scenario?
你的意思是:
var obj = test();
在这种情况下,调用test而不设置它,因此它将默认为全局对象(或在严格模式下未定义),因此:
this.x = 10;
创建全局对象的x属性(如果它尚不存在)并为其赋值10.这有效地创建了一个全局变量,与使用全局执行上下文中的变量声明创建的变量有细微差别.