当新的包含它的函数时,.apply如何工作?

时间:2017-02-17 03:13:55

标签: javascript

据我所知,关键字new会创建一个对象,包括使用this在函数中定义的属性。但我不知道apply如何将apply链接到函数的其他函数function foo() { this.a = 2; }; function bar() { this.b = 3; foo.apply(this); }; new bar();// {b: 3, a: 2} 。创建的对象在这些函数中有属性。任何人都可以弄清楚代码中发生了什么?THX。

this

最后,通过运行这些代码,我已经了解了它的工作原理。bar已被.apply()转移到foo。但它仍然显示在this.b = 3bar中的this.a = 2foo中的prototype相同。他们共享相同的上下文;(但它不像prototype那样工作,{ {1}}应该是另一回事)

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

1 个答案:

答案 0 :(得分:0)

是的,这是一个很好的问题。 this 的黄金法则是,80%的时间是=在该时期左侧的任何内容。大多数情况下,它的范围是调用函数的任何东西。

foo中的这个在调用它时将等于函数本身。 调用时,此栏中的将等于函数本身。 当在foo里面声明this.a = 2; 在bar中声明this.b = 3;

当你在第3行调用新的bar()时,你正在调用bar函数。您将绑定设置为函数调用或调用它的位置。当你调用bar时,foo会得到.apply方法,然后传递给它。你会认为.apply()会返回undefined,因为bar函数中没有 this.a 属性。但是,因为您在foo中使用apply,所以应用或继承其 this 上下文,就好像它是在bar函数内部调用一样。

所以当你在第3行进行调用时,会给你一个返回{a:3,b:2}的对象