Javascript 当新函数包含它时,应用程序如何工作?
据我所知,关键字Javascript 当新函数包含它时,应用程序如何工作?,javascript,Javascript,据我所知,关键字new将创建一个对象,该对象包含使用this在函数中定义的属性。但是我不知道如何使用apply将其他函数链接到函数。并且创建的对象在这些函数中具有属性。有人能找出代码中发生了什么吗?THX function foo() { this.a = 2; }; function bar() { this.b = 3; foo.apply(this); }; new bar();// {b: 3, a: 2} 最后,我通过运行这些代码得到了它的工作原理。这个被.apply()传输到bar
new
将创建一个对象,该对象包含使用this
在函数中定义的属性。但是我不知道如何使用apply
将其他函数链接到函数。并且创建的对象在这些函数中具有属性。有人能找出代码中发生了什么吗?THX
function foo() { this.a = 2; };
function bar() { this.b = 3; foo.apply(this); };
new bar();// {b: 3, a: 2}
最后,我通过运行这些代码得到了它的工作原理。这个
被.apply()
传输到bar
。但是它仍然被指示到foo
。因此bar
中的这个.b=3
与foo
中的这个相同。它们共享相同的上下文;(但它不会像原型
,原型
应该是另一回事)
是的,这是一个很好的问题。这方面的黄金法则是80%的时间这=周期左边的任何东西。大多数时候,它的作用域是调用函数的任何对象
在foo中,当调用函数时,它将等于函数本身。
当调用函数时,这个in-bar将等于函数本身。
当在foo this.a=2内声明时;
当在棒内声明时,b=3
在第3行调用new bar()时,您正在调用bar函数。您可以将此绑定设置为函数调用或调用它的位置。当您调用bar时,foo被赋予.apply方法,然后传递这个方法。您可能认为.apply()会返回未定义的,因为bar函数中没有this.a属性。但是,因为您在foo中使用apply,所以您在这个上下文中应用或继承它,就好像它是在bar函数中调用的一样
所以当你在3号线打电话的时候。给你一个返回{a:3,b:2}的对象是的,这是一个很好的问题。这方面的黄金法则是80%的时间这=周期左边的任何东西。大多数时候,它的作用域是调用函数的任何对象
在foo中,当调用函数时,它将等于函数本身。
当调用函数时,这个in-bar将等于函数本身。
当在foo this.a=2内声明时;
当在棒内声明时,b=3
在第3行调用new bar()时,您正在调用bar函数。您可以将此绑定设置为函数调用或调用它的位置。当您调用bar时,foo被赋予.apply方法,然后传递这个方法。您可能认为.apply()会返回未定义的,因为bar函数中没有this.a属性。但是,因为您在foo中使用apply,所以您在这个上下文中应用或继承它,就好像它是在bar函数中调用的一样
所以当你在3号线打电话的时候。您得到了一个返回{a:3,b:2}的对象,您是在问.apply()
在使用new
调用的函数中如何具体工作,还是问.apply()
一般如何工作?(实际上没有区别。)foo.apply(this)
将调用函数foo()
,并将其上下文设置为this
。请注意,使用new
调用bar()中的this
将引用新创建的实例。然后将a
分配给这个将间接地在这个新创建的实例上添加属性a
。它们彼此之间没有任何关系。@nnnnnnnn第一个,带有.apply()
的new
关键字让我感到困惑….0。你是在问.apply()
在通过new
调用的函数中使用时特别有效,或者.apply()
通常如何工作?(实际上没有区别。)foo.apply(this)
将调用函数foo()
,并将其上下文设置为this
。请注意,使用new
调用bar()中的this
将引用新创建的实例。然后在上分配a
将间接地在这个新创建的实例上添加属性a
。它们彼此之间没有任何关系。@nnnnnnnn第一个,带有.apply()
的new
关键字使我感到困惑。。“这个在foo中等于函数本身。这个在bar中等于函数本身。”听起来不对。“这个在foo中等于函数本身。这个在bar中等于函数本身。”听起来不对。
Function.prototype.ha = function () { console.log(this.prototype); console.log(this); };
function foo() { bar.apply(this); };
foo.prototype.baka = 233;
function bar() { this.b = 23;console.log(this); };bar.prototype.maybe = 2333;
var test = new foo();// {b: 23}
test.baka;// 233
test.b;// 23
test.maybe;// undefined