据我所知,关键字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 = 3
。bar
中的this.a = 2
与foo
中的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
答案 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}的对象