这个JavaScript Function.call方法在做什么

What is this JavaScript Function.call method doing?

本文关键字:什么 方法 call JavaScript Function 这个      更新时间:2023-09-26
var function1 = function(){};
var function2 = function(){};
function1.call(function2.prototype);

我花了太多时间试图理解上面的代码。有人能解释一下function1function2在上述情况下是如何变化的吗?

功能性混合物

我能够在function2的对象上调用function1中的方法。所以,我的结论是function一定已经改变了。

给定您的代码示例,function1调用中this的值将设置为function2.prototype对象的值。

var function1 = function(){
    console.log(this === function2.prototype); // true
};
var function2 = function(){};

function1.call(function2.prototype);

因此,function2.prototype上的方法(或其他值(将可以从function1内的this访问。

但如果它们被简单地调用如下:

this.someMethod();

则方法内部的CCD_ 12的值将是实际的原型对象。这将是一个不同寻常的用途。


你的链接中的代码示例似乎是这样的:

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

在本例中,asCircle函数将方法添加到作为其this值提供的任何内容中。因此,基本上,由于这次调用,Circle.prototype通过其他方法得到了增强。

正如您所看到的,.area()方法在Circle的原型链中通过该调用进行分配后变得可用。

因此,被调用的函数并不是在使用这些方法,而是恰恰相反。。。它提供了新的方法。

它们不是。您的代码正在使用function2的原型作为上下文来调用function1。因此,在调用中,"this"将映射到function2的原型,而不是窗口对象(假设您是从浏览器调用它(