当前位置 : 主页 > 大数据 > 区块链 >

_jroto中的__Proto对象

来源:互联网 收集:自由互联 发布时间:2021-06-22
在考虑这个简单的例子时 scriptfunction test(){ this.x = 10;}var obj = new test();/script 我在其中一个博客上读到,当我们使用新关键字时,将创建一个proto对象,并将“this”设置为proto对象. 所以,当我
在考虑这个简单的例子时

<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.这有效地创建了一个全局变量,与使用全局执行上下文中的变量声明创建的变量有细微差别.

网友评论