Javascript [this]与新的关键字绑定

这个问题在这里已经有了答案:

  • JavaScript中的'new'关键字是什么? 13个答案

  • 因为任何函数都可以是构造函数。 想象一下,如果你自己使用foo

    var obj3 = new foo(3);
    

    你也希望得到一个类似的对象{ a: 3 } ,对吧?

    即使函数连接到其他东西,这仍然可以工作。 每次你使用new你都在创建一个新的对象,而不是改变现有的对象。

    首先,您将该函数用作方法:

    obj1.foo(2);
    

    在这种情况下,上下文被设置为obj1因为它是调用它的那个。 但是,当您使用new品牌时,会创建一个新对象并将该新对象用作上下文。


    当调用此obj1.foo( 2 )在执行的方法obj1作为参数传递的2.当foo执行定义了属性调用a到调用对象和分配给它的值something在这种情况下,2。 这种情况下的calling对象是obj1 。 因此,由于这个原因, obj1获得了a值为2的属性。

    如果我评论这行:obj1.foo(2)上面的日志的结果是未定义的。

    发生这种情况是因为如果你评论你提到的那一行。 obj1不会获得属性a 。 因此,在这种情况下a是不确定的。 一般来说,如果我们考虑一个空对象objobj = {} 。 如果您执行以下操作:

    obj.a
    

    您可以在对象obj上定义一个名为a的属性。 此外,如果您执行以下操作:

    obj.a = 4;
    

    你做了两件事,你定义了属性a并给它赋值。


    所以,让我们把它分解成更小的步骤。

    首先, obj1.foo调用foo函数。 foo函数接受一个参数并将该参数赋值给调用foo的对象的a键(这比这更复杂一些,如果你愿意,我可以详细说明)。

    所以当你调用obj1.foo(2) ,你调用了foo方法,通过obj1对象的角度传入参数2 。 这就是为什么obj1.a将等于2。由于这是分配一个值到命令obj1.a ,该呼叫的忽略都会obj1.a是未定义的。

    链接地址: http://www.djcxy.com/p/40861.html

    上一篇: Javascript [this] keyword binding with new

    下一篇: what effect does the 'new' have in a JS method?