Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当新函数包含它时,应用程序如何工作?_Javascript - Fatal编程技术网

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