这个JavaScript Function.call方法在做什么?
我花了太多时间试图理解上面的代码。有人能解释一下在上述情况下,这个JavaScript Function.call方法在做什么?,javascript,function,prototype,Javascript,Function,Prototype,我花了太多时间试图理解上面的代码。有人能解释一下在上述情况下,function1和function2是如何变化的吗 我能够在function2的对象上调用function1中的方法。所以,我的结论是函数一定已经改变了。它们没有改变。您的代码正在使用function2的原型作为上下文调用function1。因此,在调用中,“this”将映射到function2的原型,而不是window对象(假设您是从浏览器调用它)给定您的代码示例,调用function1时this的值将设置为function2.
function1
和function2
是如何变化的吗
我能够在
function2
的对象上调用function1
中的方法。所以,我的结论是函数
一定已经改变了。它们没有改变。您的代码正在使用function2的原型作为上下文调用function1。因此,在调用中,“this”将映射到function2的原型,而不是window对象(假设您是从浏览器调用它)给定您的代码示例,调用function1
时this
的值将设置为function2.prototype
对象的值
var function1 = function(){};
var function2 = function(){};
function1.call(function2.prototype);
因此,function2.prototype上的方法(或其他值)可以从this
内部function1
访问
但如果它们只是像这样被调用:
var function1 = function(){
console.log(this === function2.prototype); // true
};
var function2 = function(){};
function1.call(function2.prototype);
然后方法中的this
的值将是实际的原型对象。这将是一个不寻常的用途
链接中的代码示例如下所示:
this.someMethod();
在本例中,asCircle
函数向作为其this
值提供的任何内容添加方法。因此,基本上,Circle.prototype
通过调用其他方法得到了增强
如您所见,.area()
方法在通过该调用分配后,将在循环的原型链中可用
因此,不是调用的函数正在使用这些方法,而是相反。。。它提供了新的方法。你所说的“改变”是什么意思?重新编辑:不要期望人们关注随机链接。如果有实质性的东西,请在问题本身中引用。你似乎有更好的事情要做,我建议你继续做,让更友善的人花时间回答我的问题。但是,谢谢你的建议。沙格尹军:与其生气,不如把@T.J.Crowder的建议当作有用的信息。你的问题越全面,对你和其他人都越有利。链接很好,但应该被视为补充,最相关的信息直接放在问题中。有趣的是,我尝试将其与SimpleJSInheritance
一起使用。由于某种原因,它不起作用。这可能是因为您在this.someMethod()中提到的原因代码>示例。但是,这可能是它自己的问题。再次感谢。@ShaggyInjun:不客气。是的,这种方法只是一种扩展方法。这些方法在调用时可能没有用处。坦率地说,使用.call()
和this
来达到这个目的似乎有点奇怪。我宁愿他们只接受.prototype
作为常规参数。那样看起来就更清楚了。
var asCircle = function() {
this.area = function() {
return Math.PI * this.radius * this.radius;
};
this.grow = function() {
this.radius++;
};
this.shrink = function() {
this.radius--;
};
return this;
};
var Circle = function(radius) {
this.radius = radius;
};
asCircle.call(Circle.prototype);
var circle1 = new Circle(5);
circle1.area(); //78.54